SQL vraag

Status
Niet open voor verdere reacties.

martijn12321

Gebruiker
Lid geworden
14 nov 2011
Berichten
827
Hallo,
Ik ben bezig met een site waar ik info over een gebruiker weer moet geven. Ik gebruik PHP.
Ik heb 2 tabellen, userproject en project.
In userproject zit de kolom UserID en ProjectID.
De bedoeling is dat die in de tabel userproject kijkt welke ProjectID's er bij de UserID horen die in de varibale $uid zit.
Dit lukt tot nu toe met een WHERE.
Nu wil ik echter ook nog dat die dan in de tabel project kijkt welke naam er bij de ProjectID hoort. Ik weet dat dit met een JOIN moet maar ik weet niet hoe/of ik ze kan combineren (met een where), of moet dit op een hele andere manier?

Bedankt!:thumb:
 
Joinen in de WHERE is mogelijk maar niet altijd even duidelijk. Een andere syntax is dit:
[sql]
SELECT *
FROM tabel_a
INNER JOIN tabel_b ON tabel_a.iets = tabel_b.ietsanders
INNER JOIN tabel_c ON tabel_b.weerietsanders = tabel_c.andnowforsomethingcompletelydifferent
[/sql]
Dat maakt vrij duidelijk dat je tabel A selecteert en daar tabel B aan koppelt op voorwaarde dat iets in tabel A gelijk moet zijn aan ietsanders in tabel B.
De join met tabel C is in dit voorbeeld op voorwaarde dat weerietsanders in B gelijk moet zijn aan andnowforsomethingcompletelydifferent uit tabel C, maar de voorwaardekan ook C met A vergelijken. Het enige wat niet kan is tabel C joinen op een voorwaarde die alleen gebruik maakt van A en B (maar da's logisch)

in jou geval zou je dus iets krijgen als:
[sql]
SELECT *
FROM users
INNER JOIN user_project ON user_project.userid = users.id
INNER JOIN projecten ON projecten.projectid = user_project.id;
[/sql]
Let tot slot op wat je selecteert, ik doe nu * omdat ik niet weet wat jij nodig gaat hebben, maar het is 100x beter om altijd exact op te geven wat je wilt, dus b.v.
[sql]
SELECT projecten.naam AS projectnaam, user.naam AS usernaam, projecten.id AS projectid
[/sql]
Waarom: als in twee of meer tabellen die je joint een kolom "id" hebben dan levert "SELECT id" een error op omdat SQL niet weet welke van de ids je bedoelt. Als je ze een fout alias geeft: [sql]SELECT project.id , user.id[/sql] dan krijg je in PHP maar één kolom in je resultset en weet je niet welke van de twee ids dat is. Geef elke kolom dus altijd een duidelijke, unieke naam. (en daarom heb ik ook een hekel aan de kolomnaam 'id')
 
Laatst bewerkt door een moderator:
Maar in die code pakt die toch niet alleen de rij waar de userid de waarde van $uid is (laten we $uid voor het gemak maar even '4' noemen)
 
Yep. En anders even proberen he, dan leer je het snelst. Zolang je geen DELETE, UPDATE, INSERT doet kan er weinig fout gaan.
 
Yup.

De ON clausules bepalen onder welke voorwaarde er gekoppeld wordt, en de WHERE bepaalt welke van de gekoppelde records teruggegeven moeten worden.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan