Mehrfache Einträge löschen

pl_90

Angesehenes Mitglied
Hallo...
Ich habe in meiner Tabelle mehrfach gleiche Einträge und ich möchte, dass nur einer dort steht...
Wie könnte ich das machen, damit nur einer drinne bleibt und die anderen die gleich sind gelöscht werden?
 
Nach Mehrfache Datensätze googeln und bsp. den Magerquark-Blogeintrag lesen.

PS: Der Blog ist nicht von mir.
tongue.gif


Ach - ich sehe, Fundstellen 6/7 verweisen auf dieselbe Seite.
 
Danke.. Aber das war mir zu kompliziert.. Ich habe noch was gefunden und folgendes gemacht:

$res = mysql_query("SELECT id, url FROM tabelle");

while (list($id, $url) = mysql_fetch_array($res))
{
mysql_query("DELETE FROM tabelle WHERE url = '".$url."' and id != '".$id."'");
}

Danke.. trotzdem...
smile.gif
 
QUOTE (pl_90 @ Mo 1.10.2007, 20:26)while (list($id, $url) = mysql_fetch_array($res))
{
mysql_query("DELETE FROM tabelle WHERE url = '".$url."' and id != '".$id."'");
}

Nur ist genau dies das, was man mit Sql nicht machen soll. Sql ist mengenorientiert. Wenn man da ein per Mengenzugriff lösbares Problem zeilenweise löst (noch dazu mit einem Herauskopieren der Daten in eine andere Sprache), dann ist das normalerweise um ein Vielfaches aufwendiger.

Außerdem ist der Code nicht wirklich sicher. Entweder kopiert mysql_fetch_array alle Daten auf einmal raus (was ich nicht weiß), dann würden alle mehrfachen Einträge gelöscht werden, weil die erste ID die zweite und die zweite die erste löscht. Oder mysql_fetch_array ruft die Daten zeilenweise vom Datenbankserver ab. Wenn dann zwischen dem Abrufen und dem Löschen ein anderer Nutzer genau diese herausgezogene ID interaktiv löschen würde, dann wäre die zugeordnete Url auch endgültig weg.

Und Code, der zu viel löscht, den sollte man vermeiden - denn sonst kommt Murphy und es passiert genau das, was eigentlich fast nicht passieren kann
ohmy.gif
 
Eigentlich sollte nichts schlimmes passieren, da dieser Befehl die mehrfache Einträge löscht, außer der eigenen ID ..
wink.gif

Das hat auch so geklappt..
wink.gif
 
Zurück
Oben