Résultats Ordonner Occurrence
-
27-10-2019 - |
Question
Je les deux tableaux suivants.
BookmarkTag (BookmarkID, TagID) Tag (TagID, Titre)
Actuellement, je suis sélectionné toutes les balises avec le BookmarkID approprié. Le problème est que je veux seulement sélectionner l'étiquette une fois pour éviter les doubles emplois dans le résultat et aussi que ramener les balises se produi le plus.
Ceci est mon actuelle requête SQL:
SELECT Tag.Title
FROM `Tag` INNER JOIN BookmarkTag
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'
La solution
Vous devez mettre la condition de jointure dans une clause ON
après le mot-clé JOIN
. Non dans la clause where
.
Vous mélangeaient avec la syntaxe SQL89 SQL92. Cela peut fonctionner, je ne l'ai pas testé, mais cela est plus rapide.
SELECT Tag.Title
FROM `Tag` t
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid)
WHERE B.BookmarkID = 1
GROUP BY t.tagid
ORDER BY count(*) DESC
Afin de rendre les résultats unique par étiquette, faire un group by
sur tagid.
Ensuite, vous pouvez order by
occurrence en utilisant count (*) pour voir faire les étiquettes avec le flotteur occurrence la plus élevée au sommet.
(essayez d'utiliser toujours count(*)
car il est plus rapide que count(afield)
)
Autres conseils
SELECT t.Title, COUNT(*) AS TitleCount
FROM BookmarkTag AS bt
INNER JOIN Tag AS t ON t.TagID = bt.TagID
GROUP BY t.Title
ORDER BY TitleCount DESC
Si vous voulez obtenir un 7 la plupart des titres populaires, ajouter LIMIT 7
à la fin de requête, ou tout autre numéro. Ma version va générer tous dans l'ordre décroissant de leur popularité.