C'est un peu bizarre. J'ai la requête suivante:Forcer mySQL à rejoindre une table (pour faire une requête non optimisée, ce dont j'ai besoin)
SELECT * , GROUP_CONCAT(x.tag
SEPARATOR ',') AS tags
FROM tag AS t, tag AS x, tag_message_rel AS r, message m
INNER JOIN `user` AS u ON m.user_id = u.id
WHERE t.tag
IN (
'kikikiki', 'dsa'
)
AND m.id = r.message_id
AND t.id = r.tag_id
AND x.id = r.tag_id
GROUP BY m.id
HAVING COUNT(*) >=2
ORDER BY m.created_at DESC
LIMIT 0 , 20
Comme vous pouvez le voir j'utilise t à se joindre à trouver les messages que je veux, de l'autre côté j'utiliser x pour imprimer les étiquettes d'un message. I i effacer la ligne:
AND x.id = r.tag_id
je vais obtenir les messages que je veux, mais les balises auront toutes les balises dans la table tags séparés par des virgules. Si je laisse la ligne là, je n'aurai que ces 2 tags. Si j'utilise expliquer i get:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE u system PRIMARY NULL NULL NULL 1 Using temporary; Using filesort
1 SIMPLE t range PRIMARY,tag tag 252 NULL 2 Using where
1 SIMPLE x eq_ref PRIMARY PRIMARY 4 verse.t.id 1
1 SIMPLE r ALL NULL NULL NULL NULL 180 Using where; Using join buffer
1 SIMPLE m eq_ref PRIMARY PRIMARY 4 verse.r.message_id 1 Using where
maintenant je suis pas expert dans ce domaine, mais je pense que le problème est qu'il refuse de réintégrer une table dans le processus d'optimisation de la requête.
Qu'en pensez-vous? Une solution rapide?