Tu commences par extraire toutes les combinaisons "family" - "keyword" possibles, comme tu l'as fait, en joignant les deux tables:
Code :
- SELECT
- family.name,
- keyword.word
- FROM
- family,
- keyword
|
Tu auras donc un résultat contenant (nombre d'enregistrements de "family" ) * (nombre d'enregistrements de "keyword" ).
Ensuite, tu ajoutes ta table "assoc", mais tu t'en fous de savoir si oui ou non il y a un résultat dans la table de droite correspondant à la table de gauche. C'est ça un "LEFT JOIN".
Le résultat que tu veux obtenir dépend de l'existence simultanée dans "assoc" de "id_family" ET "id_keyword", donc ta jointure se fera comme ceci:
Code :
- LEFT JOIN assoc ON assoc.id_family = family.id AND assoc.id_keyword = keyword.id
|
Tu ajoutes donc une colonne, montrant si oui ou non la jointure donne un résultat, faisant un test sur le NULL, qui est la valeur retournée s'il n'y a pas de résultat.
Soit:
Code :
- IF(ISNULL(assoc.id_family),'no','yes')
|
Ce qui donne, récomposé:
Code :
- SELECT
- keyword.word,
- family.name,
- IF(ISNULL(assoc.id_keyword),'no','yes') AS link
- FROM
- keyword,
- family
- LEFT JOIN assoc ON assoc.id_keyword = keyword.id AND assoc.id_family = family.id
|