Ich habe eine ungewöhnliche SQL-Tabelle (nicht meins), die die folgenden Felder (unter anderem) hat: last_name, primary_name, secondary_name
, bezeichnend für Ehepaare. Der Nachname wird als geteilt angenommen (nicht sehr modern, ich weiß), und wenn es kein Paar ist, dann kann entweder primary_name
oder secondary_name
NULL sein. (Die Tabelle enthält auch mehrere Duplikate.)Kann ich eine SQL-Abfrage zwei Übereinstimmungen in jeder Zeile machen lassen?
Ich möchte eine Liste aller Namen ("first last") in der Datenbank erhalten, alphabetisiert in der üblichen Weise. Im Moment bin ich dabei zwei Durchgänge durch die Datenbank mit PHP und PDO:
$qstr = "SELECT DISTINCT primary_name, last_name
FROM members
WHERE primary_name IS NOT null
ORDER BY last_name, primary_name";
$sth = $dbh->prepare($qstr);
$sth->execute();
// output the results
$qstr = "SELECT DISTINCT secondary_name, last_name
FROM members
WHERE secondary_name IS NOT null
ORDER BY last_name, secondary_name";
$sth = $dbh->prepare($qstr);
$sth->execute();
// output the new results
Aber das Endergebnis nicht alphabetisiert, weil der zweite Durchgang beginnt wieder vorbei.
Wie kann ich alle Namen auf einmal vollständig alphabetisch sortiert bekommen? Gibt es eine Möglichkeit, dies in SQL zu tun, oder muss ich zwei Arrays erstellen und sie anschließend in PHP neu alphabetisch sortieren?
EDIT Die Datenbank sieht wie folgt aus:
last_name primary_name secondary_name
----------------------------------------
Abrams Joe Susan
Miller Sam Abby
Die gewünschte Ausgabe etwas so sein würde:
["Joe Abrams","Susan Abrams","Abby Miller","Sam Miller"]
Stattdessen, wenn der erste Durchgang alle Männer bekommt und die zweiten Durchlauf alle Frauen, bekomme ich etwas wie folgt:
["Joe Abrams","Sam Miller","Susan Abrams","Abby Miller"]
Können Sie ein Beispiel für eine Ausgabe veröffentlichen, die Sie sehen möchten (unter Verwendung von 4 oder 5 verschiedenen Fällen von Namenskombinationen)? –