Mysql Выборка с сортировкой из нескольких таблиц

alexvp

Новичок
Доброе утро, уважаемые!

Обычно стараюсь не беспокоить по пустякам, но тут бьюсь второй день и перспективу не вижу.
Стоит задача сделать подсчет рейтинга пользователей за разные действия, например, комментарий к статье, голосование за статью (неважно какая оценка, важен факт голосования), загрузка файла и т.п. Каждое действие заносится в свою таблицу. Например, есть таблица комментарий, голосований и т.д.
Проблем нет сделать выборку по одной таблице с группировкой по id пользователя и подсчетом его активности (действий) за разные временные интервалы. Скажем, за всё предыдущее время. Ну и с сортировкой по убыванию, например. Использую следующий вариант запроса:

PHP:
select userid, count(userid) as count from rates 
where daterate < CURDATE() + INTERVAL 1 DAY 
group by userid order by count(userid) desc
Проблема начинается, когда пытаюсь объединить запросы из разных таблиц. Никак не выходит. Подскажите, пожалуйста!
 

alexvp

Новичок
Работает :)
Но не пойму как сделать в случае использования UNION сложение результатов из разных таблиц для одного id пользователя?
Всплыла еще одна проблемка - почему то не работает сортировка в этом объединенном запросе. Смена asc на desc и обратно не приводит к изменению порядка вывода результатов...
 

WMix

герр M:)ller
Партнер клуба
Но не пойму как сделать в случае использования UNION сложение результатов из разных таблиц для одного id пользователя?
PHP:
select * from t1 where user_id = 2
union
select * from t2 where user_id = 2
важно чтоб колличество и последовательность полей совпадало

Всплыла еще одна проблемка - почему то не работает сортировка в этом объединенном запросе. Смена asc на desc и обратно не приводит к изменению порядка вывода результатов...
PHP:
(select 'c' as f)
union
(select 'b' as f)
order by f asc/desc
уверен?
 

alexvp

Новичок
Спасибо за советы, но все равно до конца ситуацию победить не могу. Вот какой у меня упрощенный (выкинуто условие выбора по дате) объединенный запрос к двум базам

PHP:
(select userid, count(userid) as count 
from comments 
group by userid)

UNION 

(select userid, count(userid) as count 
from rates 
group by userid)

order by count(userid) asc
На выходе получаю простой подсчет числа появлений разных userid в двух таблицах. А мне надо, чтобы получалась сумма появления, скажем userid = 1, в разных таблицах. Например, userid = 1 оставил 3 комментария и выставил 5 оценок. В сумме д.б. 8. А сейчас просто получаю 3 и 5. Подскажите, что надо добавить в запросе, чтобы сразу шло суммирование?

Спасибо WMix с сортировкой разобрался.
 

WMix

герр M:)ller
Партнер клуба
PHP:
select f, count(*) as cnt

from (
	(select 1 as id, 'c' as f)
	union
	(select 2 as id, 'b' as f)
	union
	(select 3 as id, 'c' as f)
)x

group by f
и твори что хочешь, групируй, складывай....

возможно в данном случае это не лучший подход, я пытаюсь обьяснить основы SQL

кстати group by можно тоже в union использовать
 
Сверху