Bij posten mysql num rows kijken en waneer hoger is dan 50 onderste 10 deleten?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dalando De Zuil

Dalando De Zuil

31/08/2010 21:47:28
Quote Anchor link
Hoe kan ik als de mysql_num_rows hoger is dan 50, de 10 met het laagste ID verwijderen? Ik heb niet gevonden op google...?
 
PHP hulp

PHP hulp

19/04/2024 15:57:15
 
- SanThe -

- SanThe -

31/08/2010 21:51:54
Quote Anchor link
DELETE ..... ORDER BY .. ASC/DESC LIMIT 10
 
- Raoul -

- Raoul -

31/08/2010 21:53:04
Quote Anchor link
en dan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if (mysql_num_rows($iets) > 50){

// Wat SanThe zegt

}

?>
 
Dalando De Zuil

Dalando De Zuil

31/08/2010 21:58:04
Quote Anchor link
dus

if (mysql_num_rows($iets) > 50){
DELETE WHERE id = ??? ORDER BY id ASC LIMIT 10
}

id heeft hier auto_incresement

maar wat moet er bij ??
 
- SanThe -

- SanThe -

31/08/2010 22:03:23
Quote Anchor link
Als je zomaar gewoon 10 records wilt verwijderen dan volstaat WHERE 1 ORDER BY .. LIMIT 10. Vergeet nooit de LIMIT anders is je database leeg.
 
- Raoul -

- Raoul -

31/08/2010 22:03:49
Quote Anchor link
Je doet het verkeerd.
Eerst heb je geen query gemaakt
en ten tweede heb je een aantal dingen vergeten.

Een gok:

mysql_query("DELETE FROM iets ORDER BY id ASC LIMIT 10");

en dan nog wat debugging, maar dat kan je zelf?
 
Dalando De Zuil

Dalando De Zuil

31/08/2010 22:13:15
Quote Anchor link
okay dus nu heb ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

// hij checkt iedere keer als er iets gepost is of er meer dan 50 staan
// Dus ik plant als alles goed gaan bij het posten deze code...
// Maar is dat goed?


echo 'Bericht toegevoegd!'; // hier nog het bericht dat het toevogen was gelukt
if (mysql_num_rows($iets) > 50){

    $delqry = "DELETE FROM tabelnaam ORDER BY id ASC LIMIT 10";
    if(mysql_query($delqry){
        echo 'Laatste tien verwijdert';
    }

    else
    {
        echo 'error!';
        // loggen
    }
}

else
{
// Er waren nog geen 50 posts, dus gewoon niks doen
}
?>


IS dit dan goed?
Gewijzigd op 31/08/2010 22:13:45 door Dalando De Zuil
 
Chris -

Chris -

31/08/2010 22:15:23
Quote Anchor link
Zet er wat test-data in, en voer het uit. Door het te doen leer je er het meeste van Dalando ;-)
 
- Raoul -

- Raoul -

31/08/2010 22:15:53
Quote Anchor link
Ja dit is denk ik goed.
Voor je het vraagt kun je het ook altijd uitproberen?
Gewijzigd op 31/08/2010 22:16:25 door - Raoul -
 
- SanThe -

- SanThe -

31/08/2010 22:15:57
Quote Anchor link
Je bent toch nog aan het testen, dus probeer het zou ik zeggen.
 
Dalando De Zuil

Dalando De Zuil

31/08/2010 22:21:13
Quote Anchor link
Bedankt, zal er morgen naar kijken, ik moest vanmorgen vroeg (4 uur :@) uit de veren dus ik maak het niet te laat!
 
Niek s

niek s

31/08/2010 22:25:43
Quote Anchor link
Dude, te zien aan wat je hier wil heb je waarschijnlijk een verkeerd data model.. Wat probeer je te doen?!

je snapt dat het aantal "berichten" nu altijd tussen de 41 en de 50 gaat zitten?
- op het moment dat je meer's 50 (=51) hebt, verwijderd ie er 10.
- 51 - 10 = 41.
- Je zooi loopt op,
- bereikt 50..
- bereikt 51, en start bij het begin..

Beetje krom...

Wil je niet gewoon dat de nieuwste 50 op het scherm komen?

Oh, en wanneer jij op staat? Denk niet dat er hier iemand is die daar iets om geeft ;-) Maar toch bedankt hoor!
 
Dalando De Zuil

Dalando De Zuil

01/09/2010 15:47:55
Quote Anchor link
Niek s op 31/08/2010 22:25:43:
Dude, te zien aan wat je hier wil heb je waarschijnlijk een verkeerd data model.. Wat probeer je te doen?!

je snapt dat het aantal "berichten" nu altijd tussen de 41 en de 50 gaat zitten?
- op het moment dat je meer's 50 (=51) hebt, verwijderd ie er 10.
- 51 - 10 = 41.
- Je zooi loopt op,
- bereikt 50..
- bereikt 51, en start bij het begin..

Beetje krom...

Wil je niet gewoon dat de nieuwste 50 op het scherm komen?

Oh, en wanneer jij op staat? Denk niet dat er hier iemand is die daar iets om geeft ;-) Maar toch bedankt hoor!


Goed punt.

Ik probeer dat als er 50 records in de database staan, de 10 met heet laagste id verwijdert wordt. (Dus als er de records met het id 150 t/m 200 in staan, dan worden 150 t/m 160 verwijdert)
Maar als dit met mijn scriptje niet werkt, hoe moet het dan??
Gewijzigd op 01/09/2010 15:48:45 door Dalando De Zuil
 
Milo S

Milo S

01/09/2010 16:13:01
Quote Anchor link
Haal alles uit de database tel dat, als dat hoger is dan 50 haal je van wat je geteld heb 50 af dan maak je je limit variabel en zet je daar je uitkomst neer.
Zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
$selQry
  = "SELECT
                regel1,
                regel2,
                regel3
            FROM
                tabel"
;

# Query uitvoeren
if( $sql = mysql_query( $selQry ) )
{

    # Meer dan 50?
    if( mysql_num_rows( $sql ) > 50 )
    {

        # Teveel items uitrekenen
        $teveel = mysql_num_rows( $sql ) - 50;
        
        $delQry  = "DELETE FROM
                        tabel
                    ORDER BY
                        id
                    ASC
                    LIMIT '"
.$teveel."'";
                    
        # Query uitvoeren
        if( !mysql_query( $delQry ) )
        {

            # Fout bij verwijderen
        }
    }

    else
    {
        # Er zijn niet meer dan 50 items
    }
}

else
{
    # Foutmelding
    # (fout in query)

}
?>


Probeer voortaan zelf ook iets verder te denken dan klakkeloos onze scripts overnemen... In jou post zeg je dus ja klopt van je wat je zegt, als je dat al doorheb hoe moeilijk is het dan om te bedenken dat je dus van je totaal som 50 afhaalt en je dan het verschil hebt.

Beschouw dit niet als afkraken maar opbouwende kritiek op je manier van posten.
Gewijzigd op 01/09/2010 16:17:31 door Milo S
 
Hipska BE

Hipska BE

01/09/2010 16:24:27
Quote Anchor link
Nooit gegevens uit DB verwijderen. (waarom zou je trouwens, je weet nooit of je het ooit nog nodig hebt)

Je toont gewoon dmv LIMIT 50 de laatste 50 berichten. Dat er nog meer in de DB staan hoeft de gebruiker helemaal niet te weten.
 
Tobias Tobias

Tobias Tobias

01/09/2010 16:27:55
Quote Anchor link
@hipska BE
Lijkt mij ook veel beter. Verwijderen kan altijd nog, gegevens terughalen is iets lastiger (ook wel bekend als onmogelijk)
 
Dalando De Zuil

Dalando De Zuil

01/09/2010 16:29:21
Quote Anchor link
Okay, nou heb ik het ingebouwd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$selQry
  = "SELECT
            naam,
            bericht
            FROM
            shout
            ORDER BY
            id DESC
            LIMIT
            20
        "
;

if( $sql = mysql_query( $selQry ) )
{

    if( mysql_num_rows( $sql ) > 50 )
    {

    while($row = mysql_fetch_assoc($res))
    {

        $bericht = preg_replace("/http:\/\/([^\/]+)[^\s]*/", "<a href='$0'>LINK</a>", $row['bericht']);
            echo "<span class='name' id='name'>-".$row['naam'].":</span> ".$bericht."<hr>"; // de regels

            $teveel = mysql_num_rows( $sql ) - 50;
        
            $delQry  = "DELETE FROM
                                tabel
                                ORDER BY
                                 id
                            ASC
                              LIMIT '"
.$teveel."'";
                    
            # Query uitvoeren
            if( !mysql_query( $delQry ) )
            {

              echo 'MYSQL ERROR';
              mail('[email protected]', 'ERROR', 'Website error, Deleting error');
  
            }
// Check delete query
    } // While
    }
    else // Niet meer dan 50
    {
    while($row = mysql_fetch_assoc($res))
    {


            $bericht = preg_replace("/http:\/\/([^\/]+)[^\s]*/", "<a href='$0'>LINK</a>", $row['bericht']);
            echo "<span class='name' id='name'>-".$row['naam'].":</span> ".$bericht."<hr>"; // de regels
    } // While

    } // Einde check 50
}
else // Mysql Error
{
echo 'MYSQL ERROR';
mail('[email protected]', 'ERROR', 'Website error,'.mysql_error());
}

?>


En deze errors krijg ik terug:

Notice: Undefined variable: res in /home/vhosts/www.dutchharderstylez.nl/getshouts.php on line 89

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/vhosts/www.dutchharderstylez.nl/getshouts.php on line 89


En een lege div. Help?



Toevoeging op 01/09/2010 17:39:20:

EDIT: Laat maar, zelf gefixt.
Gewijzigd op 01/09/2010 16:46:08 door Dalando De Zuil
 
Milo S

Milo S

01/09/2010 18:46:33
Quote Anchor link
Delando de tranen schieten bijna in me ogen. Je hebt bijna geen een nette structuur over gehouden!

  • Dat wat je zelf hebt ingevoegd heeft geen 1 tab die beetje logisch is.
  • Commentaar op plekken die niet logisch zijn, zeg je altijd wat iets gaat doen nadat het gebeurt is?
    Voorbeeld:
    Jan is klaar met eten... komt Delando langs; Jan gaat eten.?
  • Mail functie check je niet
  • Je voert een while 2 keer uit terwijl hij maar 1 keer nodig is. Je denkt nu misschien waarom maakt dit nou weer uit? Nou als je nog meer informatie in die while loop wilt stampen, dan krijg je 2 keer een while loop van bijv 15 regels en dat is zonde van je overzicht.


Fatale Fout:
Je geeft je 1e query een limit van 20 mee, zo kun je toch nooit meer als 50 records krijgen...

Ik doe het nog een keer voor, en daarna wil ik geen onlogische dingen meer terug zien oke?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
$selQry
  = "SELECT
                naam,
                bericht
            FROM
                shout
            ORDER BY
                id
            DESC"
;

# Query uitvoeren
if( $sql = mysql_query( $selQry ) )
{

    # Er zijn items
    if( mysql_num_rows( $sql ) > 0 )
    {

        # While loop uitvoeren
        # Zie je hij hoeft maar een keer :D

        while( $rec = mysql_fetch_assoc( $sql ) )
        {

            $link = preg_replace('/http:\/\/([^\/]+)[^\s]*/', '<a href="'.$o.'">link</a>', $rec['bericht']);
            echo '<span class="name" id="name">- '.$rec['naam'].': </span>'.$link.'<hr>';
        }

        
        # Meer dan 50
        if( mysql_num_rows( $sql ) > 50 )
        {

            $teveel = mysql_num_rows( $sql ) - 50;
            
            $delQry  = "DELETE FROM
                            shout
                        ORDER BY
                            id
                        ASC
                        LIMIT '"
.$teveel."'";
                        
            # Query uitvoeren
            if( !mysql_query( $delQry ) )
            {

                echo 'Er is een fout in de query opgetreden bij het verwijderen.';
            }
        }
    }

    else
    {
        echo 'Er zijn geen items gevonden.';
    }
}

else
{
    echo 'Er is een fout in de query opgetreden.';
}

?>


PS: In je link wil je een variabelen 0 aanroepen, weet niet wat het is, geen goede naam namelijk en ik zie ook nergens dat je hem aanmaakt dus doe dat nog even anders doe hij het niet ;).
Gewijzigd op 01/09/2010 18:54:01 door Milo S
 
Hipska BE

Hipska BE

02/09/2010 11:15:39
Quote Anchor link
Nu krijg ik ook tranen... Lees eerst eens wat er gezegd werd.
Het is niet aangeraden om ze te deleten!

En daarbij, sorteren op ID gaat ook ooit mislopen, beter is sorteren op een date(-time) veld.

De errors geven aan dat de query niet gelukt is. Je SQL is vast niet in orde. check hiervoor mysql_error()
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.