Ik heb de volgende tabellen:
In de tabel 'nodes' wil ik een overzicht geven van alle content die door gebruikers is aangemaakt. Dit kan bijvoorbeeld een pagina, artikel, forum post of plaatje zijn. In dit geval wil ik informatie ophalen van alle pagina's ('pages'). Ook wil ik uit de tabel nodes_roles alle rid's (rol-id's) ophalen die toegang hebben tot een bepaalde pagina (relatie nodes.nid - nodes_roles.nid is 1 op veel). De uiteindelijke resultset moet dus zoiets opleveren als
Ik probeer dit te bewerkstelligen met de volgende query:
Maar nu krijg ik:
Met andere woorden - er worden een aantal zaken goed door elkaar gegooid. Wie kan mij helpen deze query te verbeteren? Ik zit er nu al uren op en kom maar niet verder. Informatie uit twee tabellen halen lukt nog wel, maar omdat ik met 4 tabellen zit raak ik telkens in de war.
code:
1
2
3
4
5
6
7
| nodes pages users nodes_roles ----- ----- ----- ----------- nid nid uid nid type level name rid title weight created alias uid pid |
In de tabel 'nodes' wil ik een overzicht geven van alle content die door gebruikers is aangemaakt. Dit kan bijvoorbeeld een pagina, artikel, forum post of plaatje zijn. In dit geval wil ik informatie ophalen van alle pagina's ('pages'). Ook wil ik uit de tabel nodes_roles alle rid's (rol-id's) ophalen die toegang hebben tot een bepaalde pagina (relatie nodes.nid - nodes_roles.nid is 1 op veel). De uiteindelijke resultset moet dus zoiets opleveren als
code:
1
2
3
4
5
6
7
| nid type title created uid uname level weight alias pid rid 15 page support 1121015767 1 Admin 1 1 support 1 2 17 page Vacatures 1112027143 2 Reveller 3 4 vacatures 10 2 17 page Vacatures 1112027143 2 Reveller 3 4 vacatures 10 5 17 page Vacatures 1112027143 2 Reveller 3 4 vacatures 10 6 18 page contact 1121026884 1 Admin 2 1 contact 3 2 18 page contact 1121026884 1 Admin 2 1 contact 3 5 |
Ik probeer dit te bewerkstelligen met de volgende query:
SQL:
1
2
3
4
5
| SELECT n.nid, n.type, n.title, n.created, n.uid, p.level, p.weight, p.alias, p.pid, u.name FROM nodes n, pages p, users u LEFT JOIN nodes_roles nr ON (n.nid = nr.nid) WHERE n.type = 'page' AND n.uid = u.uid ORDER BY p.pid, p.weight ASC |
Maar nu krijg ik:
code:
1
2
3
4
5
6
7
8
| nid type title created uid name level weight alias pid rid 1 page Home 1121015453 1 Admin 0 1 0 1 15 page support 1121015767 0 Anoniem 1 1 support 1 2 17 page Vacatures 1112027143 0 Anoniem 3 4 vacatures 10 2 17 page Vacatures 1112027143 0 Anoniem 3 4 vacatures 10 5 17 page Vacatures 1112027143 0 Anoniem 3 4 vacatures 10 6 18 page contact 1121026884 0 Anoniem 2 1 contact 3 2 18 page contact 1121026884 0 Anoniem 2 1 contact 3 5 |
Met andere woorden - er worden een aantal zaken goed door elkaar gegooid. Wie kan mij helpen deze query te verbeteren? Ik zit er nu al uren op en kom maar niet verder. Informatie uit twee tabellen halen lukt nog wel, maar omdat ik met 4 tabellen zit raak ik telkens in de war.
[ Voor 7% gewijzigd door Reveller op 07-08-2006 14:41 ]
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."