Задавайте вопросы, мы ответим
Вы не зашли.
Помогите, пожалуйста, составить запрос.
Есть таблица table из двух столбцов
id_text (это id статьи)
id_tag (это id тэга к статье).
К одной статье может быть до 4 тэгов, т.е. таблица для примера может выглядеть так:
id_text | id_tag
1 | 1
1 | 3
2 | 4
3 | 1
3 | 2
3 | 3
3 | 4
Нужно выбрать 5 статей с наибольшим количеством тэгов и вывести в убывающем порядке, указывая для каждой статьи количество имеющихся для нее тэгов. Вот так это должно выглядеть для примера:
Название статьи | Общее кол-во тэгов | Кол-во каждого тэга
Статья 5 | 100 | Тэг1 (50 шт.), Тэг2 (30 шт.), Тэг4(20 шт.)
Статья 1 | 85 | Тэг2 (40 шт.), Тэг3 (35 шт.), Тэг5 (10 шт.)
Статья 3 | 72 | Тэг3 (72 шт.)
Статья 2 | 14 | Тэг5 (10 шт.), Тэг6 (4 шт.)
Статья 4 | 5 | Тэг1 (5 шт.)
Даже не знаю, с какой стороны подступится.
Неактивен
Попробуйте начать с
Активен
deadka, сделал. Выдает заголовки и общее количество для каждого заголовка. Код ниже.
А что сюда добавить, чтобы для каждого заголовка (poster) помимо общего кол-ва тэгов (reactions) у нее выводилось количество каждого тэга (reaction)?
Отредактированно NVB (17.05.2022 08:44:54)
Неактивен
Т.е. теги для статьи могут дублироваться?
Приведите пример тестовых данных и результат для этих данных. А то пример из первого поста
К одной статье может быть до 4 тэгов,
только запутывает
Неактивен
Да, что-то я со вводной намудрил.
Давайте еще раз.
Есть форум.
Пользователи форума - в таблице user
Отредактированно NVB (17.05.2022 16:51:26)
Неактивен
Неактивен
Большое спасибо, vasya! Все заработало как надо!
Подскажите, пожалуйста, следующее.
1. Допустим у меня не 2 оценки в таблице reaction, как я указал в примере, а 20.
И все их придется вручную прописывать в запросе - sum(if(reaction_id = 'L'),1,0) as `Оценок "Лайк" ` и т.д. - ? Я правильно понимаю? Иначе никак?
2. В примере чуть выше я указал, что в итоге должна вывестись вот такая таблица:
Отредактированно NVB (18.05.2022 19:21:42)
Неактивен
NVB написал:
1. Допустим у меня не 2 оценки в таблице reaction, как я указал в примере, а 20.
И все их придется вручную прописывать в запросе - sum(if(reaction_id = 'L'),1,0) as `Оценок "Лайк" ` и т.д. - ? Я правильно понимаю? Иначе никак?
Да.
NVB написал:
2. В примере чуть выше я указал, что в итоге должна вывестись вот такая таблица:
Пользователь | Всего оценок | Оценок "Лайк" | Оценок "Дизлайк"
Николай | 5 | 2 | 3
Анна | 3 | 2 | 1
Михаил | 1 | 1 | 0
А как изменить запрос, что Вы привели в #6, чтобы для каждого количества выводился и тип оценки?
Т.е. к запросу надо как-то прицепить таблицу reaction и получить оттуда название оценок reaction_name.
В итоге должно получиться:
Николай | 5 | Лайк 2 | Дизлайк 3
Анна | 3 | Лайк 2 | Дизлайк 1
Михаил | 1 | Лайк 1 | Дизлайк 0
можно вместо
sum(if(reaction_id = 'L'),1,0)
использовать
concat('Лайк ',sum(if(reaction_id = 'L'),1,0))
Неактивен
Спасибо, vasya!
Неактивен