echo $begrüßung;
Da brauchen wir wohl doch etwas Rauch... :-)
ich hoffe, ich kann da als nichtraucher auch einen beitrag liefern... ;-)
Der Papst ist auch Nichtraucher... :-)
bei beiden möglichkeiten mit unterabfrage und ohne ist dir meiner meinung nach ein kleiner logischer fehler unterlaufen. sprich du versuchst beim vorkommen mehrerer gleicher e-mails immer die max(id) mit ins boot zu nehmen, was sicherlich so erst einmal auch ein guter ansatz ist.
Erstmal wird für jede eindeutige Email durch die Gruppierung und das max(id) eine ID ermittelt. Durch das HAVING COUNT(*) > 1 fallen dann die Datensätze raus, die auf jeden Fall erhalten bleiben sollen. Von den zu löschenden bleibt immer nur einer übrig, auch wenn es mehr als zwei gleiche Emails gab. Deswegen muss man das ggf. mehrfach anstoßen. Das habe ich in Kauf genommen, da sowieso eine händische Lösung (für phpMyAdmin) gesucht war.
allerdings könnte das HAVING COUNT(*) > 1 in beiden versionen probleme bereiten.
Das HAVING wirkt zusammen mit der über die Gruppierung gezählten Elemente. Ist es das, was dir Bauchschmerzen bereitet?
Mir ist auch nicht ganz klar, wie das COUNT(*) noch an sein richtiges Ergebnis kommt. Das HAVING läuft ja erst, wenn schon fast alles vorbei ist. Sprich: In der Ergebnismenge vor dem HAVING müsste sich nur ein Datensatz mit der max. ID pro Gruppe befinden. Keine Ahnung, wie das MySQL dann noch zählt.
schließlich sollte das ziel sein, eine liste der id's zu bekommen, die erhalten werden sollen oder aber eine liste der Id's, die gelöscht werden sollen.
Letzeres hatte ich bei meinem Lösungsansatz im Sinn. Lass dich mal nicht von dem (äußeren) SELECT verwirren. Das nahm ich nur, um die Datensätze anzuzeigen, die gelöscht werden können.
Im Gegensatz zu Matthias habe ich beide Varianten (unter MySQL 4.1) getestet und das Ergebnis entsprach meinen Erwartungen: Von mehrfachen Einträgen wurde jeweils einer angezeigt.
Ich probierte vorhin allerdings kein DELETE. Dies wollte ich grade nachholen, scheiterte aber in der 4.1-Variante an:
Und auch in der Temp-Table-Variante hatte ich kein Glück :-(
Das DELETE müsste so aussehen:
DELETE test FROM test, temptable WHERE id = x;
Dies wird unter MySQL 4.1 wie gewünscht abgearbeitet. Diese Syntax (multi-table delete format) wird jedoch erst ab MySQL 4.0 unterstützt.
Also wird für 3.xx doch ein Script herhalten müssen.
echo "$verabschiedung $name";