Подсчет самого тегового тега с MySQL - PullRequest
1 голос
/ 03 апреля 2010

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

Текущий запрос, который я использую:

SELECT tag1, COUNT(tag1) AS counttag 
FROM code 
GROUP BY tag1 
ORDER BY counttag DESC LIMIT 1

Это нормально, за исключением того, что он учитывает только наиболее часто встречающиеся теги tag1 - а в моей базе данных по 5 тегов на пост - поэтому есть столбцы tag1, tag2, tag3, tag4, tag5. Как получить наибольшее значение тега из всех 5 столбцов в одном запросе?

Jack

Ответы [ 3 ]

9 голосов
/ 03 апреля 2010

Вы должны составить 2-3 таблицы. Я обычно делаю 3:

код

  • ID
  • код

code_tags:

  • code_id
  • tag_id

теги:

  • ID
  • имя

Чтобы сделать запрос, который показывает количество использованных тегов:

   SELECT t.*, COUNT(tag_id) as code_count 
     FROM code_tags ct 
LEFT JOIN tags t ON ct.tag_id = t.id 
 GROUP BY tag_id 
 ORDER BY code_count DESC 
    LIMIT 1
1 голос
/ 03 апреля 2010
Select tag, Count(tag) AS counttag 
From (
    Select tag1 As tag
    From code
    Union All
    Select tag2 As tag
    From code
    Union All
    Select tag3 As tag
    From code
    ...
) t
Group BY tag
Order BY counttag Desc Limit 1

Лучше было бы нормализовать ваши таблицы (см. Также mark_dj's answer ):

Таблица code_tag (содержит все теги кода):

Code_id
Tag
0 голосов
/ 03 апреля 2010

Ну, вы правы, что ваша структура базы данных является проблемой.

Вы можете создать запрос SQL, который содержит подзапросы, каждый из которых проходит по одной и той же таблице и извлекает информацию о каждом поле тега. Однако я бы предложил две альтернативы:

  1. Просто сделайте 5 разных запросов. Если вам конкретно не нужна эта информация в одном запросе SQL (что кажется маловероятным), будет гораздо проще просто сделать 5 запросов к БД и затем организовать информацию программно

  2. Исправьте структуру вашей БД для использования таблиц соединения. Я бы рискнул предположить, что это только первая из множества проблем, с которыми вы столкнетесь из-за этой структуры БД.

При объединении таблиц вы смотрите на 2 дополнительные таблицы:

CREATE TABLE code_tags {
  code_id INT,
  tag_id INT
}

CREATE TABLE tags {
  id INT,
  other fields
}

Вместо полей tagX в таблицах code вы используете таблицу объединения для добавления тегов

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