Hallo zusammen
Ich mühe mich gerade mit einer MySQL-Abfrage ab und komme einfach nicht weiter.
Ich habe eine Tabelle t_0000user mit den Feldern pk_0001user, r_0002email, r0004usertyp. Im Feld r0004usertyp kann entweder ein 'p' (=Person) oder ein 'u' (=Unternehmen) stehen.
In zwei weiteren Tabellen sind dann je nach Usertyp weitere Infos zu diesem User gespeichert:
t_1000personen mit den Feldern pk_fk_1001person_0001 (Fremdschlüssel zu pk_0001user), r_1002name, r_1003vorname, etc.
t_2000unternehmen mit den Feldern pk_fk_2001unternehmen_0001 (Fremdschlüssel zu pk_0001user), r_2002firmenname, r_2003apname, r_2004apvorname, etc.
Für eine Übersichtstabelle, in welcher u.a. die ID, E-Mail, Usertyp, Name, Vorname und einige weitere Typen-spezifische Felder angezeigt werden sollen, habe ich bisher 1 + n Abfragen gemacht.
Also jetzt mal vereinfacht:
$query_user = "SELECT pk_0001user, r_0002email, r_0004usertyp FROM t_0000user";
Und dann in einer while-Schleife:
if ($res['r_0004usertyp'] == 'p')
{
// Privatperson
$query_userdet = "SELECT r_1002name AS username, r_1003vorname AS uservorname FROM t_1000personen WHERE pk_fk_1001person_0001 = '". $pk_0001user ."' LIMIT 1";
}
else if ($res['r_0004usertyp'] == 'u')
{
// Unternehmen
$query_userdet = "SELECT r_2002firmenname AS firmenname, r_2003apname AS username, r_2004apvorname AS uservorname FROM t_2000unternehmen WHERE pk_fk_2001unternehmen_0001 = '". $pk_0001user ."' LIMIT 1";
}
Nun möchte ich aber erreichen, dass die HTML-Tabelle, die ich aus dem Resultat der Abfrage erstelle, beliebig sortiert werden kann - also z.B. auch nach dem Namen oder dem Vornamen. Und das klappt ja so nicht, weil diese Abfrage erst in der while-Schleife gemacht wird.
Ich könnte nun natürlich alles zuerst in ein mehrdimensionales Array schreiben und dieses dann vor der Ausgabe nach der gewünschten "Spalte" sortieren. Aber da ich auch noch eine Blättern-Funktion einbauen möchte, macht das ja keinen Sinn, da ich mit dieser Technik zuerst immer alle Datensätze auslesen müsste, obschon ich nur 20 Datensätze brauche...
Also habe ich nun versucht, das alles in eine einzige Abfrage zu packen und diese dann gleich in der Abfrage zu sortieren. Leider aber bisher ohne Erfolg...
Wenn ich das hier probiere:
SELECT pk_0001user, r_0002email, r_0004usertyp, r_1002name, r_1003vorname, r_2002firmenname, r_2003apname, r_2004apvorname FROM t_0000user LEFT JOIN t_1000personen ON t_1000personen.pk_fk_1001person_0001 = t_0000user.pk_0001user LEFT JOIN t_2000unternehmen ON t_2000unternehmen.pk_fk_2001unternehmen_0001 = t_0000user.pk_0001user
bekomme ich eine Tabelle mit den Spalten pk_0001user, r_0002email, r_1002name, r_1003vorname, r_2002firmenname, r_2003apname, r_2004apvorname
das ist ja eigentlich auch korrekt, aber ich möchte ja eine einzige Spalte "name" oder so erhalten, in welcher dann entweder der Wert aus dem Feld r_1002name oder der Wert aus dem Feld r_2003apname drin steht. Nur so kann ich dann ja in einem Wisch richtig sortieren.
Wenn ich's mit einem Alias versuche:
SELECT pk_0001user, r_0002email, r_0004usertyp, r_1002name AS testname, r_1003vorname, r_2002firmenname, r_2003apname AS testname, r_2004apvorname FROM t_0000user LEFT JOIN t_1000personen ON t_1000personen.pk_fk_1001person_0001 = t_0000user.pk_0001user LEFT JOIN t_2000unternehmen ON t_2000unternehmen.pk_fk_2001unternehmen_0001 = t_0000user.pk_0001user
dann bekomme ich eine Spalte "testname" und eine Spalte "testname_1". Also auch nicht das, was ich möchte...
Wahrscheinlich gehe ich das Ganze völlig falsch an...? Bin für jeden Tipp sehr dankbar.
Vielen Dank und liebe Grüsse
Andrea