Sören: [MySQL] m:n Relation. Eine id mit bestimmten Kriterien bestimmen

Beitrag lesen

Hallo,

SELECT rightid FROM group_to_right gtr  
WHERE EXISTS  
(  
    SELECT 1 FROM group_to_right exists_gtr1, group_to_right exists_gtr2  
    WHERE gtr.rightid = exists_gtr1.rightid AND gtr.rightid = exists_gtr2.rightid  
    AND exists_gtr1.groupid = 1 AND exists_gtr2.groupid = 2  
)  
AND NOT EXISTS  
(  
    SELECT 1 FROM group_to_right not_exists_gtr1, group_to_right not_exists_gtr2  
    WHERE gtr.rightid = not_exists_gtr1.rightid AND gtr.rightid = not_exists_gtr2.rightid  
    AND not_exists_gtr1.groupid = 3 AND not_exists_gtr2.groupid = 4  
)  
LIMIT 0,1

Mit "Permutationen" meinte ich, ob du für die Kombinationen von groupids fixe Daten, die du prüfen willst oder ob du jedes Kombination von Group-IDs prüfen willst?

Wenn ich das richtig verstehe, dann ja ich habe fixe Daten von groupids
Meine php funktion sieht nacher so aus:

function get_rightid_by_groups($groups = array()) {
    // $groups für den sql befehl formatieren
    // query ausführen um rightid zu bekommen
    // falls es keine rightid für die gewünschte Kombination von groupids gibt dann neu erstellen.
    // rightid ausgeben.
}

Dabei ist $groups die liste aller $groupids, die mit einer rightid verbunden sein sollen. Alle anderen möglichen groupids die nicht in $groups enthalten sind sollen nicht mit der rightid verbunden sein.
Daher EXISTS und NOT EXISTS

Leerer Datensätze sind Datensätze mit NULL für jede Spalte. ?? Möchtest du also einen Ergebnisdatensatz (Record) ausgegeben haben, wenn es für eine der gewünschten Kombinationen aus groupids keine Entsprechung bei rightid gibt?

Richtig!

Gruß Sören