Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: SQL Inner Join
AUTOR BEITRAG
Morph

RANG Deckschrubber

#1 - 24.09 15:00

Hiu ... geht mal auf New Topic ... da kann man jetzt sogar Kategorien auswählen. Das ist aber nicht der Grund weshalb ich den Thread hier jetzt aufmache. Ich habe folgendes Problem, ich habe eine Rechte Klasse die etwa so aufgebaut ist:

right table => r_id, name und package
group table => group_id und dann die r_id
set_right => u_id und dann die group_id

Mit bissel Phantasie kann man sich vorstellen was das bringen soll. Ich ordne einem User einer Gruppe ein in der table set_right und geht er in die Gruppe und vergleicht ob das Recht da drinne ist. Wenn nicht - kein Recht - wenn ja - dann Recht. Das habe ich schon hinbekommen mit folgendem code:
code:

SELECT  
                                    `right`.`r_id`  
                               FROM  
                                    `{pre}right` AS `right` 
                                    INNER JOIN  
                                         `{pre}right_groups` AS `groups` 
                                    ON 
                                         `right`.`r_id` = `groups`.`r_id` 
                                    INNER JOIN 
                                         `{pre}right_set_user` AS `set_user` 
                                    ON 
                                         `groups`.`group_id` = `set_user`.`group_id` 
                                    AND 
                                         `set_user`.`u_id` = '$userid' 
                               WHERE 
                                    `right`.`name` = '$right' 
                               AND 
                                    `right`.`package` = '$package'


Das geht auch soweit. Jetzt habe ich allerdings noch eine Table, die heisst
right_feature => u_id, r_id und dann allow => 0 oder 1

Damit ich halt einem Benutzer das Recht extra nachher noch entziehen oder ihm geben kann, unabhänig von der Gruppe.
Das habe ich mir so vorgestellt:
code:

SELECT 
`right`.`r_id` 
FROM 
`{pre}right` AS `right`
INNER JOIN 
`{pre}right_groups` AS `groups`
ON
`right`.`r_id` = `groups`.`r_id`
INNER JOIN
`{pre}right_set_user` AS `set_user`
ON
`groups`.`group_id` = `set_user`.`group_id`
AND
`set_user`.`u_id` = '$userid'
OR (
INNER JOIN
`{pre}right_feature` AS `feature`
ON
`feature`.`u_id` = '$userid'
AND
`feature`.`r_id` = `right`.`r_id`
AND 
`feature`.`allow` = '1')
WHERE
`right`.`name` = '$right'
AND
`right`.`package` = '$package'

Allerdings Mysql nicht, wie muss es richtig aussehen?!
deluxe *photoenthusiast*

RANG Master of Clanintern

#2 - 24.09 15:56

code:
SELECT 

IF(rf.allow IS NOT NULL, rf.allow, IF(sr.u_id IS NOT NULL, 1, 0)) AS right_check

FROM right as right

INNER JOIN group AS g
ON g.r_id = right.r_id

INNER JOIN set_right as sr 
ON sr.group_id = g.group_id AND sr.u_id = $userid


INNER JOIN right_feature AS rf
ON rf.r_id = right.id AND rf.u_id = $userid


WHERE right.name = $right
AND right.package = $package


Ungetestet... sollte falls der User entsprechende Rechte hat 1 sonst 0 zurück geben.