Bij posten mysql num rows kijken en waneer hoger is dan 50 onderste 10 deleten?
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...?
DELETE ..... ORDER BY .. ASC/DESC LIMIT 10
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 ??
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.
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
}
?>
// 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
Zet er wat test-data in, en voer het uit. Door het te doen leer je er het meeste van Dalando ;-)
Voor je het vraagt kun je het ook altijd uitproberen?
Gewijzigd op 31/08/2010 22:16:25 door - Raoul -
Je bent toch nog aan het testen, dus probeer het zou ik zeggen.
Bedankt, zal er morgen naar kijken, ik moest vanmorgen vroeg (4 uur :@) uit de veren dus ik maak het niet te laat!
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!
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!
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
Zoiets:
Code (php)
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
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)
}
?>
$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
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.
Lijkt mij ook veel beter. Verwijderen kan altijd nog, gegevens terughalen is iets lastiger (ook wel bekend als onmogelijk)
Code (php)
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
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());
}
?>
$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
- 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)
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
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.';
}
?>
$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
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()