PHP / MYSQL max. entries
-
ok frage ich anders:
ehm gibt es ein befehl, wo ich alle anderen - bis auf die letzten 10 - auslesen kan?
also gib mir alle -bis auf die ersten 10 - wieder
-
Hallo,
SELECT COUNT(*) AS maxcount FROM `tabelle` ORDER BY `index` ASC LIMIT maxount-10;
So oder so ähnlich könnte es funktionieren.
LG, Micha
-
RandomAccess85 schrieb:
Hallo,
SELECT COUNT(*) AS maxcount FROM `tabelle` ORDER BY `index` ASC LIMIT maxount-10;
So oder so ähnlich könnte es funktionieren.
LG, Micha
Hey danke.
Bevor ich mit Löschoptionen anfange, dachte ich mri das ich erstmal nur die anderen (alle außer die ersten 10) ausgeben lasse:$sql_befehl = "SELECT COUNT(*) AS maxcount FROM My_log ORDER BY ID ASC LIMIT maxount-10"; $execute = mysql_query($sql_befehl); while($row = mysql_fetch_object($execute)) { echo "$row->Loginhalt muss geloescht werden!<br />"; }
Aber leider funktioniert das nicht:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in index.php on line 138
138: while(execute))
-
Hallo,
ich seh grad, dass das so auch nicht funktionieren wird. Die AS-Klausel lässt sich nur auf ORDER BY oder GROUP BY anwenden. Dann wirst du wohl doch das Workaround machen müssen.
$res = mysql_query("SELECT * FROM tabelle"); $count = $mysql_num_rows($res)-10; $iRes = mysql_query("SELECT * FROM tabelle ORDER BY irgendwas ASC LIMIT 0, $count"); //usw.... //mysql_free_result($res); nicht vergessen
LG
-
RandomAccess85 schrieb:
Hallo,
ich seh grad, dass das so auch nicht funktionieren wird. Die AS-Klausel lässt sich nur auf ORDER BY oder GROUP BY anwenden. Dann wirst du wohl doch das Workaround machen müssen.
$res = mysql_query("SELECT * FROM tabelle"); $count = $mysql_num_rows($res)-10; $iRes = mysql_query("SELECT * FROM tabelle ORDER BY irgendwas ASC LIMIT 0, $count"); //usw.... //mysql_free_result($res); nicht vergessen
LG
hö?
LIMIT 0,10 ORDER BY datum DESC
das sollte doch reichen um die letzten 10 zu bekommen
du kannst dann ein delete mit jagen mit "WHERE NOT IN ( SELECT .. FROM .. LIMIT )
DELETE FROM table WHERE id NOT IN ( SELECT id FROM table ORDER BY datum DESC LIMIT 0,10)
müsste doch gehen oder??
EDIT:: delete natürlich nur senden wenn rowcount > 10 ^^
-
Hallo,
das ist jetzt die Frage
Entweder
kunoiwo schrieb:
bis auf die letzten 10
auslesen oder
kunoiwo schrieb:
bis auf die ersten 10
auslesen (wiedergeben)
//Edit: Sorry hast natürlich Recht. Dein Vorschlag müsste funktionieren.
VlG
-
Er will doch immer 10 einträge ausgeben haben.
Und wenn er merkt das es 11 einträge sind will er den 1 löschen damit es wieder 10 sind.Also nach der schnellen lösung von mir wäre es dann so:
1. Hole einträge aus datenbank
2. Prüfe RowCount:Wenn RowCount > 10 dann lösche alle aus der datenbank die nicht in die selektierung (hole mir die jüngsten 10 einträge) fallen und hole mir erneut die einträge aus der datenbank.
Wenn RowCount <= 10 Alles ok
Oder nischt ^^
Edit// Ok dein edit grad gesehen
-
Problem:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
MySQL Version: 5.1.37
-
oh
naja dann packt man es entweder in ein VIEW oder man macht ein JOIN (SELECT ...)
-
Erstmal danke für die hilfreichen Antworten.
Hab mein Glück mal probiert:$all_entries = "SELECT * FROM MyBook_log"; $result = mysql_query($all_entries); if (mysql_num_rows($result)>10) { $sql = "DELETE FROM MyBook_log WHERE ID NOT IN ( SELECT ID FROM MyBook_log ORDER BY ID DESC LIMIT 0,10)"; $result2 = mysql_query($sql); echo "Entries: ".mysql_num_rows($result).""; } else { echo "Unter 10, alles ok";}
Das passiert nichts. Kommt auch keine Fehlermeldung. Irgendwie löscht er da nichts. Was mach ich falsch?
-
Hallo,
mysql_error();
gucken ob wirklich kein Fehler produziert wird.
VlG
-
RandomAccess85 schrieb:
Hallo,
mysql_error();
gucken ob wirklich kein Fehler produziert wird.
VlG
Ahhhh
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Wurde glaube ich auch schon angesprochen.
Ehm wie ist dazu denn die Alternative:VIEW oder man macht ein JOIN (SELECT ...)
Ist mir beides nciht vertraut...
-
Hallo,
wenn du jetzt schon den COUNT hast würde sich ersterer Vorschlag anbieten. Damit umgehst du VIEW's und JOIN's komplett.
$all_entries = "SELECT * FROM MyBook_log"; $result = mysql_query($all_entries); $count = mysql_num_rows($result); if ($count>10) { $count-=10; $sql = "DELETE FROM MyBook_log ORDER BY ID ASC LIMIT ".$count.")"; $result2 = mysql_query($sql); }
Löscht alle Datensätze, bis auf die letzten 10!
LG
-
Joa viele wege führen nach Rom
Deiner natürlich auchHehe wollte grad was anmerken an deinem post, aber is schon geändert :D!
@TP - mal bei zeit anschauen oder selbst googeln:
http://dev.mysql.com/doc/refman/5.1/de/join.html
http://dev.mysql.com/doc/refman/5.1/de/create-view.html
-
RandomAccess85 schrieb:
Hallo,
wenn du jetzt schon den COUNT hast würde sich ersterer Vorschlag anbieten. Damit umgehst du VIEW's und JOIN's komplett.
$all_entries = "SELECT * FROM MyBook_log"; $result = mysql_query($all_entries); $count = mysql_num_rows($result); if ($count>10) { $count-=10; $sql = "DELETE FROM MyBook_log ORDER BY ID ASC LIMIT ".$count.")"; $result2 = mysql_query($sql); }
Löscht alle Datensätze, bis auf die letzten 10!
LG
War zwar ein kleiner Syntaxfehler drinne aber hat mir richtig gut geholfen:
$sql = "DELETE FROM MyBook_log ORDER BY ID ASC LIMIT $count";Danke euch beiden!
Wenn ihr mal in der Nähe von Kiel seid, dürft ihr euch nen Bier abholen.
-
haha alles klar
Die klammer is ihm wohl so reingerutscht
btw bin auch eher ein freund von ' -- ' . $var . ' -- '
Wird etwas schneller berechnet als " -- $var " oder wie im bsp. " -- " . $var . " -- "greez
-
Hallo,
asoooo die Klammer. Ich hab mich die ganze Zeit gewundert von welchem Syntaxfehler die Rede ist
Ja die Klammer gehört da natürlich nicht hin.//spätestens bei so lustigen Dingen wie mysql_query("SELECT * FROM tabelle WHERE feld='".$row['vorhergeholterWert']."'"); // ist "--".$var."--" nicht mehr so einfach zu vermeiden. // Aber egal, wir schweifen ab ^^
VlG
P.S. Ein Bier bitte nach Leipzig. DHL Luftpost bitte, dann ist es zum Feierabend da