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:

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:


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!=''

[/edit]
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:

LEFT JOIN
	(SELECT user_id, COUNT(*) rights_amount
	FROM user_rights
	WHERE user_id = ?) ur
	USING (user_id)

Reageren