j'interroger une table où chaque ligne a plusieurs tags:Mysql Requête - Recherche dans une table jointe sans enregistrements filtrage
SELECT
user.*,
GROUP_CONCAT(tag.tag SEPARATOR ", ") as `tags`
FROM
user
LEFT JOIN
user_tag
ON
user_tag.user_id = user.id
LEFT JOIN
tag
ON
tag.id = user_tag.tag_id
GROUP BY
user.id
Maintenant, je veux être en mesure de rechercher des utilisateurs par tags. Après avoir ajouté le où, il ressemble à ceci:
SELECT
user.*,
GROUP_CONCAT(tag.tag SEPARATOR ", ") as `tags`
FROM
user
LEFT JOIN
user_tag
ON
user_tag.user_id = user.id
LEFT JOIN
tag
ON
tag.id = user_tag.tag_id
WHERE
tag.tag LIKE "%engineer%" OR
tag.tag LIKE "%programmer%"
GROUP BY
user.id
Ceci, cependant des moyens (évidemment) que si un résultat est trouvé, la table des variables ne retourne pas tous les utilisateurs des balises plus. Ainsi, la colonne sélectionnée tags
peut ressembler à "programmeur PHP", même si l'utilisateur a plus de balises.
Existe-t-il un moyen de rechercher la table jointe sans réellement limiter les résultats renvoyés sans utiliser de sous-requêtes?
Il semble que vous voulez les enregistrements joints pour tous les utilisateurs où EXISTE un tag comme (par exemple) "% engineer%" ou "% programmer%". Mais bien sûr, une clause EXISTS est considérée comme une sous-requête, alors peut-être que ce n'est pas ce que vous voulez dans une réponse. Si c'était le cas, je pourrais vous montrer comment je construirais la requête. – hardmath