Сортировка результатов SQL из двух таблиц - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть две таблицы, tags и coupon_tags. tags содержит tagName и tagID. Каждое уникальное имя имеет уникальный идентификатор. Возможно, тег foo может иметь идентификатор тега 1, например.

Тогда coupon_tags имеет набор couponID и tagID. Существует один ряд на купон на тег. Разумеется, купон может иметь более одного тега. Эта таблица может выглядеть так:

tagID | couponID
  5        3
  4        3
  9        3
  5        6

То, что я пытаюсь сделать, - это получить 10 самых популярных тегов. У меня нет опыта сортировки алгоритмов или тяжелого SQL, поэтому я совсем не уверен, с чего начать. Любая помощь?

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

Сделайте это так:

 SELECT tagID, count(*) as TotalOccurrences from coupon_tags
    group by tagID
    order by TotalOccurrences DESC
    limit 10

Это даст вам идентификаторы наиболее часто используемых тегов.

0 голосов
/ 18 февраля 2011

Как насчет этого?

SELECT * FROM (
  SELECT T.tagID, 
         count(*) AS numerOfTags
    FROM tags AS T
    JOIN coupon_tags AS C
      ON C.tagID = T.tagID
   GROUP BY T.tagID
  )
 ORDER BY numerOfTags DESC
 LIMIT 10
0 голосов
/ 18 февраля 2011

Используйте LIMIT, чтобы вернуть только 10 строк, и используйте ORDER BY .. DESC, чтобы получить самые большие значения, и используйте GROUP BY, чтобы подсчитать теги вместе.

select t.tagID, t.tagName, count(*) as TimesUsed
from coupon_tags c
inner join tags t on t.tagID = c.tagID
group by t.tagID, t.tagName
order by TimesUsed DESC
limit 10;

Обратите внимание, что если есть связи для 10-го места или выше, например, 3 x 9 или 2 x 10, LIMIT 10 приведет к отображению только одного из них (случайным образом). Если вам нужно показать связи, которые простираются до 11-го места или дальше, это потребует сложного запроса. Лучшим вариантом для обработки этого было бы получить верхние 15, а затем в интерфейсе программирования идти дальше 10, пока не изменится значение TimesUsed.

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