Doppelte Werte filtern (nur in einer Spalte)
Honda
- datenbank
1 Vinzenz Mai0
dedlfix
Hallo,
ich möchte die in einer MySQL-Datenbank gespeicherten Userdaten ausgeben.
ID, Vorname, Alter, Emailadresse
Hierbei sollen jedoch alle Zeilen mit in der eine doppelte Emailadresse vorkommt rausgefiltert werden.
Mit SELECT DISTINCT kann ich ja nur einen Spaltenwert anzeigen lassen z.B. SELECT DISTINCT Emailadresse.
Wie kann ich das nun aber mit den anderen Spalten kombinieren?
Ich verwende MySQL 4.1.
Vielen Dank für Hilfe.
Grüsse,
Honda
Hallo Honda,
ich möchte die in einer MySQL-Datenbank gespeicherten Userdaten ausgeben.
ID, Vorname, Alter, Emailadresse
Hierbei sollen jedoch alle Zeilen mit in der eine doppelte Emailadresse vorkommt rausgefiltert werden.
was meinst Du damit genau.
1. Möglichkeit:
Sollen alle Zeilen mit einer E-Mailadresse, die doppelt vorkommt überhaupt nicht angezeigt werden?
Hier hilft Dir Schlampigkeit von MySQL. Du gruppierst nach E-Mailadresse und läßt Dir nur die Daten anzeigen, bei denen die COUNT()-Funktion 1 zurückliefert.
2. Möglichkeit
Zeige mir alle Datensätze mit einer E-Mailadresse an. Zu jeder E-Mailadresse, die mehr als einmal vorkommt, zeige mir nur einen Datensatz an?
Bei der 2. Möglichkeit solltest Du noch angeben, ob Du einen bestimmten Datensatz angezeigt bekommen willst oder ob es Dir egal ist, welche Daten zur E-Mailadresse angezeigt werden.
Wäre letzteres der Fall, so kannst Du einfach die Schlampigkeit von MySQL bezüglich GROUP BY ausnutzen und einfach nach der E-Mail-Adresse gruppieren. Dann werden Dir zufällige Daten zu mehrfachen E-Mailadressen angezeigt.
Wie kann ich das nun aber mit den anderen Spalten kombinieren?
Ich verwende MySQL 4.1.
Im sinnvollsten Fall mit einem Subselect. Das ist sauber, geht unter MySQL 4.1, geht unter anderen DBMSen. Gib bitte an, was Du willst.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
letztlich resultiert dieses Problem aus einer Nachlässigkeit.
Besser wäre es gewesen nur 1 Emailadresse pro Person zuzulassen.
Ich möchte nun einen Newsletter versenden, es soll aber dabei aber pro Emailadresse nur 1mal versandt werden.
Es spielt daher keine Rolle welcher genaue Datensatz hier genommen wird.
Ich habe nun die Möglichkeit des GROUP BY gefunden, was auf den ersten Blick ganz gut funktioniert.
$alfa=mysql_query("SELECT DISTINCT Email, ID, Vorname, Alter FROM Nutzer Group BY Email Order BY ID");
order ist das absoluter blödsinn?
Grüsse,
Honda
yo,
$alfa=mysql_query("SELECT DISTINCT Email, ID, Vorname, Alter FROM Nutzer Group BY Email Order BY ID");
order ist das absoluter blödsinn?
ja, das ist nicht so gut. weder distinct noch group by werden greifen, wenn ich dein problem richtig verstanden habe. du hast also für eine person mehrere email adressen. und wenn ich davon ausgehe, dass du namen und email-adresse auch noch in einer tabelle (Nutzer) zu stehen hast, hast du nun pro email-adresse je einen eintrag mit redundaten daten für den namen, etc. das bedeutet, dass du damit auch verschiedene ID bezeichnungen für ein und dieselbe person hast. das kann zu einem problem führen.
man kann das mit einer abfrage auffangen, ABER nur wenn man davon ausgeht, dass derselbe vorname, alter und andere daten sich
1. nicht unterscheiden in den verschiedenen datensätze von einer person.
2. unterschiedliche personen nicht zufällig die gleichen daten besitzen.
sollte eine der beiden punkten nicht gewährleistet sein, dann wird es schwierig, überhaupt eine sinnvolle unterscheidung zu finden. sollte dies aber der fall sein, dann geht es mit einer abfrage.
Ilja
echo $begrüßung;
ich möchte die in einer MySQL-Datenbank gespeicherten Userdaten ausgeben.
ID, Vorname, Alter, Emailadresse
Hierbei sollen jedoch alle Zeilen mit in der eine doppelte Emailadresse vorkommt rausgefiltert werden.
Das sieht mir dann nach einem Fehler im Datenbankdesign aus. Nicht immer hat eine Person nur eine Emailadresse. Aber wie dem auch sei ...
Wenn du
Lieschen Müller mueller@example.org
Erwin Müller mueller@example.org
in der Datenbank stehen hast, welchen Datensatz davon hättest du gern ausgegeben?
Ohne dass du da einen Festlegung triffst, wird es schwer, eine Lösung zu erarbeiten.
Übrigens stehen auch im Archiv genügend Vorschläge zum Problem "doppelte Datensätze" (<- Suchstichwort).
echo "$verabschiedung $name";