Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день всем!
В общем вопрос такой:
есть две таблицы вида:
Таблица 1. Tag
______________
Id | nid | tag id - простой primary key
nid - номер статьи из другой таблицы
1 | 15 | Petrov tag - это тег к статье nid
2 | 16 | Petrov
3 | 17 | Petrov
4 | 18 | Ivanov
5 | 19 | Ivanov
6 | 20 | Sidorov
Таблица 2. Score
______________
Id | nid | score id - простой primary key
nid - номер статьи из другой таблицы
1 | 15 | 5 name - это тег к статье nid
2 | 16 | 4
3 | 17 | 4
4 | 18 | 1
5 | 19 | 3
6 | 20 | 1
В результате sql запроса должна быть выбрана такая таблица:
Таблица 3. Result
_____________________
tag | count | sum tag - это тег из (таблицы 1. Tag), причем не повторяются теги
count - это сколько есть в (таблице 1. Tag) записей с этим тегом
Petrov | 3 | 13 sum - это сумма значений score из (таблицы 2. Score). Выборка идет по nid, имеющих данный tag
Ivanov | 2 | 4
Sidorov | 1 | 1
Составил запрос:
Неактивен
skiller_07 написал:
Может подскажите как сделать сначало, чтобы сгруппировать теги, а потом к ним применить LEFT JOIN?
С помощью подзапроса
Вот только если вы сначала сгруппируете, то Петрову вместо трех значений nid будет соответствовать только 1 какая-то величина. И как вы планируете объединять таблицы?
Зачем вам условие "WHERE tag IS NOT NULL "?
Неактивен
WHERE tag IS NOT NULL - потому, что есть статьи, в которых это поле не установлено, то есть равно = NULL
Вы не поможете составить нормальный запрос? Я что то совсем не понимаю как это можно сделать.
Неактивен
skiller_07 написал:
Вы не поможете составить нормальный запрос? Я что то совсем не понимаю как это можно сделать.
Я пытался намекнуть, что в той части, которую вы хотите исправить, он и так правильный.
Меня смущает использование left join действительно он нужен или достаточно inner join. И если всё-таки нужен, то почему вы тогда не делаете проверку score на null значения перед суммированием.
Неактивен
да вы правы, INNER JOIN будет лучше. В итоге получается почти то что надо, но вместо того чтобы показывать кол-во статей с данным тегом, он показывает кол-во людей проголосовавших за статьи с данным тегом. То есть COUNT(tag) должен отработать по таблице TAG, а он почему то отрабатывает по таблице SCORE. Как бы мне ему уточнить табличку?
Неактивен
Т.е. у вас есть строки в таблице Tag не имеющие соответствия в таблице score? Тогда вам действительно нужно использовать left join.
Неактивен
Да ладно в общем, сделаю 2 запросами... Спасибо вам за содействие!
Неактивен