dedlfix: Mit PHPMyAdmin (MySQL) doppelte Einträge löschen?

Beitrag lesen

echo $begrüßung;

Ich kann dir leider nicht sagen, ob das mit MySQL geht oder nicht, aber in der Zeit, wo hier und bei dir die Köpfe rauchen ist doch auch schnelle ein PHP-Skript geschrieben:

Nein, mit deinem Script geht das nicht.

ID email
1 email1
2 email1
...

Beim ersten Schleifendurchlauf ist id = 1 und email = email1. Damit wird in inneren Query der Datensatz mit der ID 2 gelöscht (email1 = email1 and 1 != 2).
Der zweite Durchlauf geht mit id = 2 und email = email1 ins Rennen und löscht den Datensatz mit der ID 1 (email1 = email1 and 2 != 1). Ups...

Hattest du angenommen, dass durch den Löschbefehl die bereits ermittelte Ergebnismenge der anderen Query beeinflusst wird?

Hoffe ich hab's richtig verstanden und den Code hier richtig aus dem Kopf hingeklatscht.

Da brauchen wir wohl doch etwas Rauch... :-)

Wenn dann gehts eher so (MySQL 4.1 wegen der Subselects vorausgesetzt):

SELECT * FROM test WHERE id IN (
  SELECT MAX(id)
  FROM test
  GROUP BY email
  HAVING COUNT(*) > 1
)

Für Version 3.28 sollte es mit einer temporären Tabelle gehen. Temp. Tabellen leben nur solange die Verbindung zur DB besteht. Beide Befehle müssen deshalb zusammen in das phpMyAdmin-SQL-Eingabefeld eingegeben werden.

CREATE TEMPORARY TABLE temptable
  SELECT max(id) x
  FROM test
  GROUP BY email
  HAVING count(*) > 1;
SELECT * FROM test, temptable WHERE id=x;

Beide Varianten berücksichtigen für Mehrfacheinträge immer nur einen Eintrag. Wenn man sie so oft laufen lässt, bis keine betroffenen Spalten mehr gemeldet werden, haben sie ihren Zweck erfüllt.

Zum überprüfen, dass die richtigen Datensätze ermittelt werden, lasse ich die nur ausgeben. Daraus eine Löschabfrage zu erstellen sollt enicht das Problem sein.

Hier zählt lediglich das Ergebnis.

In diesem Forum zählt eher der Lerneffekt auf dem Weg dahin :-)

echo "$verabschiedung $name";