[OPGELOST] Meerdere Joins in Query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nick Dijkstra

Nick Dijkstra

31/05/2013 10:48:19
Quote Anchor link
Ik probeer een query te maken die uit meerdere tabellen informatie ophaalt.
Het gaat om de tabellen: modules, blocks, active_modules, active_blocks, rights, user_rights

Ik heb nu deze Query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT
    b.module_id,
    r.description,
    COUNT(u.right_id)
FROM
    active_blocks AS a
LEFT JOIN
    blocks AS b
ON
    b.id=a.block_id
LEFT JOIN
    modules AS m
ON
    m.id=b.module_id
LEFT JOIN
    user_rights AS u
ON
    u.user_id=?
LEFT JOIN
    rights AS r
ON
    r.id=u.right_id
WHERE
    a.company_id=?


Wat ik nu wil is:
Alle rechten per module en block te weergeven, en waarvan die gebruiker al rechten heeft, dat het vinkje aangevinkt moet zijn.
Ik wil nu alle rechten in een array zetten, deze haal ik dan op in een andere while-loop die de actieve modules weergeeft (die werkt).

Nu moet het er zo uit komen te zien:

ADMIN (module)
-----------------------
- BEDRIJVEN - (block)
Bedrijven bekijken
Bedrijven bewerken
bedrijven verwijderen
etc.....


De indeling van mijn tabellen zien er zo uit:

modules:
id | name | description | sort

active_modules:
id | company_id | module_id

blocks:
id | module_id | name | title | description

active_blocks:
id | company_id | block_id

rights:
id | right | description

user_rights:
id | user_id | right_id



Ik hoop dat het zo duidelijk is en dat jullie mij hiermee kunnen helpen.


Edit:

Ik heb hem:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
    m.id,
    r.description,
    (SELECT
        COUNT(*)
    FROM
        user_rights AS u
    WHERE
        u.right_id=r.id
    AND
        u.user_id=?)
FROM
    modules AS m
LEFT JOIN
    blocks AS b
ON
    b.module_id=m.id
LEFT JOIN
    active_blocks AS a
ON
    a.block_id=b.id
AND
    a.company_id=?
LEFT JOIN
    rights AS r
ON
    r.module_id=m.id
AND
    r.block_id=b.id
WHERE
    r.block_id!=''

Gewijzigd op 31/05/2013 11:51:23 door Nick Dijkstra
 
PHP hulp

PHP hulp

17/11/2024 19:44:25
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

31/05/2013 16:31:45
Quote Anchor link
Misschien dat ik je verkeerd begrijp, maar ik denk dat je het niet goed opgelost.
Een subquery in SELECT vreet aan de performance, zet die gewoon in een join, dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
LEFT JOIN
    (SELECT user_id, COUNT(*) rights_amount
    FROM user_rights
    WHERE user_id = ?) ur
    USING (user_id)
Gewijzigd op 31/05/2013 16:34:59 door Ger van Steenderen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.