Как получить строки из таблицы статей 10 самых популярных тегов? - PullRequest
0 голосов
/ 05 декабря 2009

В моей базе данных есть таблица «Статьи» с названием статьи и тегами статьи. Теги статьи - это строковый столбец с тегами в нем: «люди, жизнь, президент». Каждая статья помечена таким образом.

Теперь я хотел бы получить 10 самых популярных тегов для всего населения статей. Как это сделать?

Ответы [ 2 ]

8 голосов
/ 05 декабря 2009

Если у вас есть такая возможность, лучше измените схему базы данных, чтобы иметь таблицу article, таблицу тегов и таблицу article_tags.

Это позволит гораздо более эффективно сопоставлять теги (например, те, которые вы хотите сделать), особенно если у вас много статей.

С вашим текущим дизайном вы застряли на полной итерации по (предположительно большой) таблице статей и поддержании кучи тегов (либо через временную таблицу - в этом случае вы можете сделать это с помощью хранимой процедуры), либо в прикладном коде). Целое было бы действительно неэффективно.

1 голос
/ 05 декабря 2009

Было бы намного проще, если бы вы нормализовали базу данных и создали отдельную таблицу тегов. Например, если у вас есть такая база данных:

article
    article_id
    article_title
    article_content

article_tag
    tag_name
    article_id
    UNIQUE INDEX (tag_name, article_id)
    UNIQUE INDEX (article_id, tag_name) # in order to perform fast lookups in both directions

(Возможно, это можно еще более нормализовать, создав таблицу tag, содержащую tag_name и tag_id, и заменив tag_name на tag_id в article_tag.)

Теперь вы можете представить список самых популярных тегов, используя запрос, такой как:

SELECT tag_name, count(article_id) c 
  FROM article_tag
  GROUP BY tag_name
  ORDER BY c DESC
  LIMIT 10
...