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

0

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

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

Теги:
database
tags
tagging

2 ответа

8
Лучший ответ

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

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

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

1

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

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 -table, содержащий tag_name и a 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
  • 0
    Вы получили это задом наперед - текущее состояние данных денормализовано. Изменение его на 3NF будет отражать таблицы, которые вы предлагаете.
  • 0
    Ага. Виноват. Я честно не могу сказать, о чем я думал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню