Результаты заказа по вхождению - PullRequest
0 голосов
/ 13 июня 2011

У меня есть следующие две таблицы.

BookmarkTag (BookmarkID, TagID) Tag (TagID, Title)

В настоящее время я выбираю все теги с соответствующим BookmarkID. Проблема в том, что я хочу выбрать тег один раз, чтобы избежать дублирования в результате, а также вернуть теги, которые встречаются чаще всего.

Это мой текущий запрос SQL:

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Вам необходимо поместить условие соединения в предложение ON после ключевого слова JOIN. Не в предложении where.
Вы смешивали SQL89 с синтаксисом SQL92. Это может работать, я не проверял, но это быстрее.

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

Чтобы сделать результаты уникальными для каждого тега, выполните group by для tagid.
Затем вы можете order by вхождение, используя count (*), чтобы увидеть, как теги с самым высоким вхождением всплывают наверх. (старайтесь всегда использовать count(*), потому что он быстрее, чем count(afield))

1 голос
/ 13 июня 2011
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

Если вы хотите получить 7 самых популярных названий, добавьте LIMIT 7 в конце запроса или любое другое число.Моя версия будет генерировать все в порядке убывания их популярности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...