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) :
ou en remplacement du WHERE
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
Mais avec MySQL, impossible d'avoir cette jointure "totalement ouverte".
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
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)
Partager