hallo,
wie kann ich doppelte einträge in einer tabelle löschen. gibt es dafür eine einfachere methode als alle datensätze mit GROUP BY auszulesen und in eine neue tabelle zu schreiben? vielleicht eine mysql anweisung?
danke :)
wenn du irgendwas mit GROUP BY aussortierst, warum machst du dann nicht DELETE ...... WHERE ..... und die GROUP BY Bedingung ins WHERE ?
Viktor M.
10-04-2004, 01:11
Steh gerade vor einem ähnlichen Problem. Hab eine Datenbank in der ich Anmeldungen speichere.
Da es z.B. 4 Einträge mit der gleichen E-Mailadresse gibt möchte, ich 3 löschen, so dass immer nur ein Datensatz mit dieser E-Mailadresse in der DB ist.
Gibt es dafür eine einfach Möglichkeit, oder muss ich die Tabelle mit DISTINC auslesen, in eine neue Tabelle schreiben und dann wieder rückschreiben?
Innuendo
10-04-2004, 01:27
Man sollte soetwas schon vorher verhindern, indem man Abfragen auf das Schonvorhandensein vor dem Eintragen einbaut oder gleich mit UNIQUE arbeitet.
Viktor M.
10-04-2004, 01:45
Das bringt mich jetzt auch nicht weiter ;)
Es gibt nurn einmal doppelte Einträge und die würde ich gerne löschen.
Innuendo
10-04-2004, 01:51
Original geschrieben von Viktor M.
Das bringt mich jetzt auch nicht weiter ;)
Es gibt nurn einmal doppelte Einträge und die würde ich gerne löschen.
Dann mach' es bei zukünftigen Projekten so.
Und was Deine Einträge betrifft, wirst Du wohl Zeile für Zeile abarbeiten müssen, sofern Du keine neue Tabelle erstellen möchtest.
Viktor M.
10-04-2004, 02:04
Hab nen Skript gefunden.
Falls jemand mal vor nem ähnlichen Problem steht.... <?php
//
// Doppelte Einträge aus DB-Tabelle löschen
// ========================================
echo "***************************************************************<br>";
$tabelle = "name_der_tabelle";
$spalte = "name_der_spalte_mit_doppelten_Eintägen";
// Der Datensatz mit der jeweils kleinsten ID ~ min(id) as dieser_nicht ~
// soll nicht gelöscht werden ! (Bei Bedarf ändern !!!)
$query = "
select
$spalte,
count($spalte) as anzahl,
min(id) as dieser_nicht
from $tabelle
group by $spalte
having anzahl > 1
";
$result = mysql_query($query);
if(!$result) {echo mysql_error();}
while($row = mysql_fetch_array($result))
{
$dieser_nicht = $row['dieser_nicht'];
$doublette = $row[$spalte];
$limit = $row['anzahl'] - 1;
echo $row['anzahl']. " x " . $doublette. "<br>";
$del = "
delete from $tabelle
where name = '$doublette' and id != '$dieser_nicht'
limit $limit
";
echo $del ."<br>";
// Zur Ausführung der DELETE-Anweisung Kommentarzeichen entfernen!!!
// $delete = mysql_query($del);
// if(!$delete) {echo mysql_error();}
// echo mysql_affected_rows(). " Datensätze gelöscht <br>";
}
echo "***************************************************************<br>";
// ==========================================================================
?>
Pretrojaner
29-04-2004, 11:37
Also Ich hab auch so ein Problem nur komm ich damit net ganz klar Ich möchte von der GANZEN Tabelle alle einträge die mehr als einmal drinstehn löschen so das in jeder Spallte von jedem nurnoch 1 drinsteht so das keine spallte mehr doppelt dreifach oder vierfach etc. drin ist:
Beispiel
Datenbank: web**_keineahnung_nixweiß
Von allen Tabellen die dopellte spalten haben suchen und die dopellten spalten löschen.
Beispiel
____________________
| userid| name |userip |
| 2 | horst |127.0.0.1 |
------------------------------------
| userid| name |userip |
| 2 | horst |127.0.0.1 |
------------------------------------
| userid| name |userip |
| 2 | horst |127.0.0.1 |
------------------------------------
| userid| name |userip |
| 2 | horst |127.0.0.1 |
------------------------------------
Die unteren 3 müssen weg. Ja löschen kann ich nur sind die alle durcheinander und viel zu viele.