PHP MySQL ab Datensatz 100 löschen

Dimenson

Erfahrenes Mitglied
Hallo,

leider scheitere ich gerade an einem DELETE Befehl in MySQL ^^. Naja wie immer.


Ich habe versucht, ab den 101. Datensatz die Datensätze zu löschen:

PHP:
$sql="DELETE FROM wi_user_profile_visitors WHERE user_profile = '".$user['id']."' ORDER BY visitor_date DESC LIMIT 100,*";
Leider funktioniert das nicht.

Wenn ich nun

PHP:
$sql="DELETE FROM wi_user_profile_visitors WHERE user_profile = '".$user['id']."'";

Funktioniert das auch, löscht mir aber alle Einträge.

Danke im Voraus
 
Du musst den 100. Datensatz bestimmen (bzw die WHERE bedingung da, zB die ID) und dann folgendes machen:

WHERE id > hier_die_rausgefundene_id

Annahme natürlich, dass die IDs autoinkrement sind.
 
Ich glaube so müsste es gehen:
SQL:
DELETE FROM table
WHERE id > 
SELECT MAX(id) FROM table ORDER BY id LIMIT 0,100
 
Oder so:

Code:
DELETE FROM wi_user_profile_visitors WHERE user_profile NOT IN (SELECT user_profile FROM wi_user_profile_visitors LIMIT 0,100);
 
Moin, die 100 neusten Datensätze sollen erhalten bleiben, der Rest weg.
Liege gerade vor der Glotze, ich werde es nachher testen.
 
Dann musst du den Query so abändern:
SQL:
DELETE FROM `table`
WHERE id < 
SELECT MIN(id) FROM `table` ORDER BY id DESC LIMIT 0,100
 
Das mit dem min() und < gefällt mir nicht besonders. Warum nicht ganz klar mit NOT IN() ausgrenzen?
SQL:
DELETE FROM mytable
WHERE id NOT IN (SELECT id FROM mytable ORDER BY id DESC LIMIT 100)
 
Zuletzt bearbeitet von einem Moderator:
Wo ist es mit einem kleiner Vergleich nicht ganz klar abgegrenzt? Bei NOT IN müssen doch ALLE IDs mit 100 weiteren verglichen werden oder? Sprich ich habe 100 mal mehr vergleiche?
 
Da hast du recht :-) Die Komplexität ist höher. Allerdings ist bei dir im zweiten Vorschlag ein MIN() drin, und das dürfte dann wohl genau falsch herum sein und keine Datensätze löschen ;-) Es gibt nun mal keine ID die kleiner ist als die kleinste ID ;-) Dein erster Vorschlag (Post 4) war jedoch IMHO korrekt.
 
Zurück