Supposons qu'une question comporte plusieurs balises, via une table de jointure appelée taggings. Je Jointure ainsi:SQL: collecte des valeurs de la main droite à partir d'une jointure
SELECT DISTINCT `questions`.id
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
Je veux commander les résultats selon un nom particulier, par exemple « piano », de sorte que le piano est au sommet, puis par tous les autres balises dans l'ordre alphabétique. Actuellement, je suis en utilisant cet ordre article:
ORDER BY (tags.name = 'piano') desc, tags.name
qui va complètement faux - les premiers résultats mon retour ne sont même pas taggés avec « piano » du tout. Je pense que mon problème est que je dois grouper les noms de balises et faire mon test de commande contre cela: je pense que le faire par rapport à la balise straights.name ne fonctionne pas en raison de la structure de la table de jointure résultante si je fais juste une sélection simple sur la table des étiquettes) mais je ne peux pas obtenir ma tête autour comment la réparer.
reconnaissant pour tout conseil, max
EDIT - réponse à Marcelo re COALESCE Merci beaucoup Marcelo - je n'avais pas vu auparavant. Doit lire l'api plus correctement. Cela aide réellement, mais seulement si je choisis également la clause coalese. Par exemple, ceci:
SELECT DISTINCT `questions`.id
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name
donne toujours des résultats erronés. Cependant, ceci:
SELECT DISTINCT `questions`.id, COALESCE(tags.name,'')
FROM `questions`
LEFT OUTER JOIN `taggings`
ON `taggings`.taggable_id = `questions`.id
LEFT OUTER JOIN `tags`
ON `tags`.id = `taggings`.tag_id
ORDER BY (COALESCE(tags.name,'') = 'piano') desc, tags.name
renvoie les bons résultats. J'aimerais quand même simplement sélectionner les identifiants des questions. Décidément se rapprocher de toute façon ...