Komplexe SQL-Joins
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuell frage
bedingung
brauche
code
dank
duplikat
filter
filtern
folgendes code
folgendes datenbank
grundlegende unterschied
http
klausel
liebe leute
machen
profil
program
programm
schema
url
-
Hallo liebe Leute.
Ich habe folgendes Datenbank-Schema und sollte darauf eine Abfrage starten.
http://schrotti12.lima-city.de/media/div/schema.png
Es geht darum, dass ich eine client-id bekomme und dazu alle Programme aus allen Profilen brauche, die dem Client zugeordnet sind.
Dafür wird es wohl auf eine verschachtelte Query rauslaufen, wobei ich damit noch nicht viel Ahnung habe. Aktuell frage ich nur die zugeordneten Profile ab:
SELECT * FROM clients_have_profiles LEFT OUTER JOIN clients ON clients_have_profiles.clients_id = clients.id LEFT OUTER JOIN profiles ON clients_have_profiles.profiles_id = profiles.id;
Where-Clause fehlt hier noch...
Noch zum Background: Profile haben n Programme und einem Client können mehrere Profile zugeordnet sein. Was ich eben brauche ist eine Liste aller zugeordneter Programme. Diese kann Duplikate enthalten. Das macht nix. Das werde ich dann mit einem "Distinct" oder in der Businesslogik filtern...
Wäre toll wenn mir da jemand einen Hinweis geben könnte bzw. eine Anleitung für derartige Joins kennt.
Danke! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
deine Joins sind ja schonmal garnicht so verkehrt :D
versuche mal folgendes:
SELECT programname FROM programs LEFT OUTER JOIN profiles_have_programs AS php ON php.programs_id = programs.id LEFT OUTER JOIN clients_have_profiles AS chp ON chp.profiles_id = php.profiles_id WHERE chp.clients_id = <CLIENT_ID>
(wobei <CLIENT_ID> dann eben die ClientID ist, die du bekommst).
Der grundlegende Unterschied ist, dass du ja nach Programmen fragst. Daher geht der SELECT über die Tabelle programs.
Im Beispiel wird jetzt nur der Name ausgegeben, aber das ist natürlich beliebig anpassbar. Die WHERE Klausel geht dann über die Bedingung, in diesem Fall der Filter nach der client id.
Ich hoffe das hilft dir weiter!
Viele Grüße -
Genau das hab ich gebraucht. Vielen Dank, damit ist mir sehr geholfen!
Thema kann damit auch schon wieder geschlossen werden, danke! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage