Bonjour,

Je n'arrive pas à écrire, en MySQL, une requête que je saurai aisément écrire en T-SQL (MS SQL).

Pour bien comprendre mon problème, voici un exemple :

Trois table (mot, page et nuage) me servent à afficher un nuage de mot sur mes pages. Plusieurs mots pour une page, plusieurs utilisations de mots (sur différentes pages possibles).

Table Mot :
mot = mot1, valide = 1
mot = mot2, valide = 1
mot = mot3, valide = 0
mot = mot4, valide = 1

Table Page :
page = page1, valide = 1
page = page2, valide = 1
page = page3, valide = 0
page = page4, valide = 1

Table Nuage :
page = page1, mot = mot1, poids = 1, valide = 1
page = page1, mot = mot2, poids = 2, valide = 1
page = page1, mot = mot3, poids = 2, valide = 1
page = page2, mot = mot1, poids = 2, valide = 1
page = page2, mot = mot2, poids = 3, valide = 1
page = page3, mot = mot1, poids = 3, valide = 1
page = page3, mot = mot2, poids = 3, valide = 0

Je veux afficher un tableau croisé comme celui-ci :

mot1 mot2 mot4
page1 poids=1 poids=2 poids=NULL
page2 poids=2 poids=3 poids=NULL
page4 poids=NULL poids=NULL poids=NULL

page3 et mot3 étant non valide, ils ne doivent pas apparaitre !

En T-SQL, j'aurai écrit (à peu près) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT page, mot, poids
FROM nuage
LEFT JOIN mot ON mot.m_id = nuage.n_m_id
LEFT JOIN page ON page.p_id = nuage.n_p_id
WHERE mot.valide = 1 AND page.valide = 1 AND nuage.valide = 1
ou en remplacement du WHERE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
WHERE ISNULL(mot.valide, 1) = 1 AND ISNULL(page.valide, 1) = 1 AND ISNULL(nuage.valide, 1) = 1
Mais avec MySQL, impossible d'avoir cette jointure "totalement ouverte".

Help me please

NB : Le but est d'afficher un tableau permettant d'avoir TOUS les mots valides en tant que colonne, TOUTES les pages valides en tant que ligne et aux intersections, le poids associé (d'ou le besoin des NULL)