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'
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top