2008-11-22 9 views
0

Je suis d'abord faire une recherche sur les étiquettes de table qui se traduit par toutes les lignes retournées avec leurs données supplémentaires à partir des liens de table (sur lequel je fais une jointure). Les balises de table fonctionnent de telle sorte que, pour un _id automatique, il peut y avoir plusieurs lignes (1 balise par ligne, donc plusieurs balises sont des lignes multiples). Ce que je veux faire est de remplacer plusieurs lignes qui correspondent à l'auto _id et à la requête. Je veux récupérer chaque tag pour chaque auto_id trouvé, en 1 ligne (une forme de distinct mais qui met toutes les balises séparées par des virgules dans un champ), d'où le group_concat (qui évidemment ne fonctionne pas pour le moment - i ' Je l'ai ajouté comme pseudo).MySQL A Recherche, A Sélection de plusieurs lignes, Rejoindre et tout dans une requête

SELECT ta.auto_id, li.address, li.title, GROUP_CONCAT(SELECT tag FROM tags WHERE auto_id = ta.auto_id) 
FROM `tags` AS ta 
JOIN 
links AS li 
ON ta.auto_id = li.auto_id 
GROUP BY ta.tag 
WHERE ta.user_id = 1 
AND (ta.tag LIKE '%query%') 

J'espère avoir rendu mon cas clair.

Merci beaucoup,

Ice

Répondre

1

Si je comprends ce que vous demandez, quelque chose comme ça devrait faire l'affaire:

SELECT ta.auto_id, li.address, li.title, GROUP_CONCAT(ta.tag) -- Get a comma separated list of all the tags 
FROM tags AS ta 
INNER JOIN links AS li ON ta.auto_id = li.auto_id 
WHERE ta.user_id = 1 
AND ta.tag LIKE '%query%' 
GROUP BY li.id -- Group by links id, so you get one row for each link, which contians a list of tags 
+0

Salut RoBorg! Merci beaucoup - cela m'a très proche, mais il y a une petite partie qui pourrait être impossible, c'est d'obtenir les balises pour les auto_id qui ne correspondent pas à la requête. Donc, si 1 tag correspond et que les autres ne le sont pas, il devrait tout de même en avoir pour l'auto_id. –

Questions connexes