SQL SQL-Abfrage

Das Pie

Newbie
Registriert
Jan. 2011
Beiträge
3
Huhu liebe Computerbasegemeinde,

ich hab eine kleine Abfragefrage zu SQL und zwar hab ich zwei Tabellen, an deren Aufbau ich nichts ändern kann, eine Usertabelle, mit namen, id,... und eine Userpref-Tabelle mit Modulname, Varname, userid, value:

-----------------------------------------------
Modul-----Var-----userid-----value------
-----------------------------------------------
keks------weg-----25---------wert1-----
keks------haus----25---------wert2-----
keks------bla------25---------wert3-----
keks------blup-----25---------wert4-----
keks------weg-----26---------wert1----
keks------haus----26---------wert2-----

...

Wie kann ich mittels möglichst einer SQL-Abfrage eine Ordnungstabelle erstellen, die ungefär so aussieht:

-----------------------------------------------------
name-----weg-----haus-----bla-----blup-----
-----------------------------------------------------
name1---wert1---wert2---wert3---wert4---
name2---wert1---wert2---wert3---wert4---
name3---wert1---wert2---wert3---wert4---

...


Etwas der Art:
"SELECT usertab.name AS name, moduleuserprefs.value AS wert FROM moduleuserprefs INNER JOIN usertab ON moduleuserprefs.userid = usertab.acctid AND usertab.locked = 0 WHERE modulename = 'keks' ORDER BY wert DESC $limit"

liefert ja nur jede Zeile einzeln,...
 
Das $limit ist nur aus der php-Anweisung und enthält beim Ausführen die richtigen ordnungsdaten, aber ja, für den Post hätte ich es ja auch weglassen können^^

Worauf ich aber hinaus wollte ist, dass ich den Inhalt von moduleuserprefs.Var als Spaltenkopf von der Select-Tabelle bekomme^^

Die Tabelle, die ich ausgespuckt haben möchte hat ja Kopfdaten, die selber eigendlich nur Zeilenwerte von der Tabelle moduleuserprefs aus der Spalte Var ist^^
 
Ah, ich glaub, ich verstehe jetzt was du willst.

Du mußt die Tabelle, die die Var-Value-Paare enthält für jede mögliche Var-Belegung mit einem left-join an die Usertabelle joinen.

select * from
user_tab a
left join val_tab b on a.user_id=b.user_id and b.var='haus'
left join val_tab c on a.user_id=c.user_id and c.var='auto'
left join val_tab d on a.user_id=d.user_id and d.var='boot'

Beachten musst du, das du in deinem Ergebniss vermutlich NULL-Werte hast. Insbesondere, wenn du noch eine Where-Bedingung anfügen willst musst du das beachten!

Falls du ein mySQL als DB hast kannst du dir auch einmal die Aggregatsfunktion group_concat ansehen. Vieleicht hilft dir die ja schon.

Gruß
Azdak
 
Ah ja, bis auf die AS a,b,... , die du vergessen hast hat es geklappt, ich hoffe nur, dass das einigermaßen performant abläuft, immerhin werden 4 Tabellen zusammengemauschelt^^
 
Das hängt ganz wesentlich davon ab, ob in den Tabellen passende Primary-Keys definiert wurden oder nicht.
 
Zurück
Oben