J'ai les tableaux suivants:
pages:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| page_id | int(11) | NO | PRI | NULL | auto_increment |
| type | varchar(20) | NO | | NULL | |
| categories | varchar(255) | NO | | NULL | |
| title | varchar(255) | NO | MUL | NULL | |
| text | longtext | NO | MUL | NULL | |
+------------+--------------+------+-----+---------+----------------+
personnalisé:
+---------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+-------+
| page_id | int(10) unsigned | NO | PRI | NULL | |
| key | varchar(255) | NO | PRI | NULL | |
| value | longtext | NO | | NULL | |
+---------+------------------+------+-----+---------+-------+
Je veux rejoindre les tables d'une manière où:
1) toutes les entrées de la première table sont retournées LEFT JOIN custom ON pages.page_id = custom.page_id
2) pages.type IN ('type_a', 'type_b', 'type_c')
3) "clé" de la deuxième table a la valeur "votes" custom.key = 'votes'
J'ai tout fait jusqu'à présent, mais la troisième condition est le problème. S'il n'y a pas d'entrée pour key = 'votes'
Dans le tableau personnalisé la requête ne renvoie que ceux-ci avec des entrées. Je veux retourner NULL
s'il manque des entrées.
J'ai besoin de key = 'votes'
, Car j'ai d'autres entrées pour ce page_id où la clé n'est pas "votes" et cela duplique les lignes de pages
Ajoutez simplement votre contraint custom.key='votes'
à la LEFT JOIN
SELECT *
FROM pages LEFT JOIN custom
ON pages.page_id=custom.page_id AND custom.key='votes'
WHERE pages.type IN('type_a','type_b','type_c') ;
Je le ferais comme ça:
SELECT *
FROM pages
LEFT JOIN
( SELECT * From custom where key='votes') cv
on pages.page_id = cv.page_id
WHERE pages.type IN ('type_a', 'type_b', 'type_c');
essayez de changer votre condition where en custom.key = 'votes' OR custom.key est null.