INNER JOIN hulp nodig
users
id | firstname | lastname | email | group
En groups
group_id | group_name | group_desc | rights
Ik wil met een query een gebruiker selecteren met het gebruikers id (users.id), en ook direct de groep ophalen zodat ik als resultaat alle kolommen heb van de rijen die bij elkaar horen.
Bij de users tabel staat in de kolom group het groeps id. In de groups tabel is groups_id het id van de groep.
Ik heb al dingen geprobeerd als:
Code (php)
1
SELECT users.id, users.firstname, FROM users INNER JOIN groups ON users.id = :id AND groups.group_id = users.group
Ik hoop dat de bovenstaande foute query ongeveer duidelijk maakt wat ik wil.
Ik heb verder nog dingen die ik me afvraag:
- Niet elke user hoort bij een groep, de kolom group is bij de meeste user rijen leeg.
Hoe zorg ik ervoor dat ik geen problemen hierdoor krijg in mijn query? Dus bijvoorbeeld een error voorkomen, en dat er gewoon alleen data uit de query komt die van de users tabel is, en geen data uit de groeps tabel (omdat er geen groep is gekoppeld)
- De resultaten van de query gaan via een php array, zoals $result['firstname'];
Maar die array keys zullen dus iets worden als $result['users.firstname'];
Hoe gaat dit met de array keys?
Gewijzigd op 17/11/2014 19:51:41 door Mark Hogeveen
Normaal heb je zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Tabel users:
- id
- group_id <--- Dit geeft aan dat er een relatie is met groups
- naam
- ...
Tabel groups:
- id
- name
- ...
- id
- group_id <--- Dit geeft aan dat er een relatie is met groups
- naam
- ...
Tabel groups:
- id
- name
- ...
Gewijzigd op 17/11/2014 20:02:42 door Frank Nietbelangrijk
Quote:
Bij de users tabel staat in de kolom group het groeps id. In de groups tabel is groups_id het id van de groep.
Even goed kijken, ook al ben niet gewend dat adequate namen aan kolommen worden toegekend :-P
Harry, ik denk dat op zoek bent naar de left join:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
u.id,
u.firstname
FROM
users u
LEFT JOIN
groups g
ON u.group = g.group_id
WHERE
u.id = :id
u.id,
u.firstname
FROM
users u
LEFT JOIN
groups g
ON u.group = g.group_id
WHERE
u.id = :id
Zie gelijk even hoe SQL degelijk te formatteren, one-liners zijn voor komedianten.
Door de LEFT JOIN krijgen de kolommen uit de groups tabel geen waarde, dus in php bestaat de key wel maar is ie null
- Aar -:
UBB-code die topic aantaste gefixt.
Gewijzigd op 17/11/2014 20:48:58 door - Ariën -
Mijn excuses Ger ik had hem niet gezien.