+----+-----------+-----------+-------------+----------+
| id | value_id | parent_id | dropdown_id | name |
+----+-----------+-----------+-------------+----------+
| 7 | 14945 | 14944 | 57 |4000 |
| 8 | 14944 | 0 | 56 |bbb |
| 9 | 14943 | 14940 | 59 |comprable |
| 10 | 14942 | 14939 | 59 |comprable |
| 11 | 14940 | 14931 | 58 |3 |
| 12 | 14939 | 14930 | 58 |2 |
| 13 | 14931 | 14929 | 57 |5000 |
| 14 | 14930 | 14928 | 57 |4000 |
| 15 | 14929 | 0 | 56 |rrr |
| 16 | 14928 | 0 | 56 |ttt |
+----+-----------+-----------+-------------+----------+
J'ai ci-dessus le tableau avec des données. J'utilise une requête ci-dessous pour obtenir des données de la table.
SELECT `d0`.`name` AS `name0`, `d1`.`name` AS `name1`, `d2`.`name` AS `name2`, `d3`.`name` AS `name3` FROM `my_table_1` AS `d0`
INNER JOIN `my_table_1` AS `d1` ON d1.parent_id = d0.value_id
INNER JOIN `my_table_1` AS `d2` ON d2.parent_id = d1.value_id
INNER JOIN `my_table_1` AS `d3` ON d3.parent_id = d2.value_id
WHERE (d0.dropdown_id=56)
Ici, j'utilise la jointure interne pour obtenir value_id
de son parent_id
.
Fondamentalement, il vérifiera si un parent est disponible pour l'enregistrement en cours et obtiendra ses données le cas échéant. Je peux obtenir des données correctes si j'ai autant de parents pour un enregistrement que le nombre de INNER JOIN
Comme avec la requête ci-dessus, j'obtiens des détails comme
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
+-------+-------+-------+-----------+
Ici, je veux aller sous le tableau
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
| bbb | 4000 | NULL | NULL |
+-------+-------+-------+-----------+
Ici, au dernier rang, je n'ai pas d2
et d3
tables disponibles. Je veux également inclure ces données avec la valeur NULL
.
Toute aide est appréciée.
Si vous remplacez les jointures internes par des jointures gauches, vous obtiendrez les données souhaitées. La jointure de gauche montre les résultats même s'il n'y a pas de correspondance de l'autre côté et dans ces cas, affiche une valeur nulle.
SELECT `d0`.`name` AS `name0`, `d1`.`name` AS `name1`, `d2`.`name` AS
`name2`, `d3`.`name` AS `name3` FROM `my_table_1` AS `d0`
LEFT JOIN `my_table_1` AS `d1` ON d1.parent_id = d0.value_id
LEFT JOIN `my_table_1` AS `d2` ON d2.parent_id = d1.value_id
LEFT JOIN `my_table_1` AS `d3` ON d3.parent_id = d2.value_id
WHERE (d0.dropdown_id=56)
Utilisez Left Joins, voici pourquoi:
Les bases des jointures
Un Inner Join ne vous donnera que des lignes qui correspondent à la fois du tableau de gauche et de droite.
A Left Join renverra tous les enregistrements de la table de gauche et les enregistrements correspondants de la table de droite. Cela signifie que là où il n'y a pas de correspondance de la bonne table, des valeurs NULL apparaîtront à la place des colonnes de la bonne table.
A Right Join agit de la même façon mais inversement pour les tableaux gauche et droit.
Ensuite, il y a les jointures externes complètes et les jointures croisées, mais vous pouvez les rechercher car elles ne s'appliquent pas à votre question!