Объединение 2ух таблиц и группировка одним запросом

Статус
В этой теме нельзя размещать новые ответы.

lolshik

Постоялец
Регистрация
21 Фев 2008
Сообщения
316
Реакции
127
Доброе время суток, коллеги.
Подскажите пожалуйста возможно ли решить мою задачу одним запросом к базе mysql?
Имеем две таблицы. Одна с новостями, другая с комментариями к новостям.

Комментарии
Для просмотра ссылки Войди или Зарегистрируйся
Новости
Для просмотра ссылки Войди или Зарегистрируйся
Можно ли одним запросом получить ТОП 5 самых комментируемых новостей. Вида: id новости, название новости, кол-во комментариев?
 
Используй конструкцию LEFT JOIN ON для объединения двух таблиц
 
Попробуйте как-нибудь так:

select Новости.*, count(Комментарии.id_comment) as c from Новости left join комментарии on новости.id_news = комментарии.id_news group by Новости.id_news order by c limit 5

или

select top 5 news.id_news from Новости news
inner join Комментарии comm on comm.id_news = news.id_news
where count(comm.id_comment)>0
group by news.id_news
order by count(comm.id_comment) desc

или

select news.id_news from Новости news
inner join (
select top 5 id_news, count(id_comment) comm_count from Комментарии
where count(id_comment)>0
group by id_news) comm on comm.id_news = news.id_news
order by comm.comm_count desc
 
Используй конструкцию LEFT JOIN ON для объединения двух таблиц

Не смог разобраться с этой конструкцией. Решил так

PHP:
SELECT COUNT( * ) AS count_num, cn.name_news
FROM coment_news n, news cn
WHERE n.id_news = cn.id_news
GROUP BY n.id_news
ORDER BY `count_num` ASC
LIMIT 0 , 30

Единственное, что не понятно. Почему если сделать стоблец COUNT (*) после cn.name_news т.е. (SELECT cn.name_news, COUNT( * ) AS count_num FROM ....) перестаёт работать сортировка по стобцу count_num.

С чем это связано?
 
Не смог разобраться с этой конструкцией. Решил так
PHP:
SELECT COUNT( * ) AS count_num, cn.name_news
FROM coment_news n, news cn
WHERE n.id_news = cn.id_news
GROUP BY n.id_news
ORDER BY `count_num` ASC
LIMIT 0 , 30
Единственное, что не понятно. Почему если сделать стоблец COUNT (*) после cn.name_news т.е. (SELECT cn.name_news, COUNT( * ) AS count_num FROM ....) перестаёт работать сортировка по стобцу count_num.
С чем это связано?
Код:
SELECT COUNT(*) AS count_num, news.name_news
FROM coment_news
LEFT JOIN news
ON news.id_news = coment_news.id_news
GROUP BY coment_news.id_news
ORDER BY count_num ASC
LIMIT 0 , 30
Как-то так, если переписать ваш запрос. Лефт джоины быстрее работают. Ну подставлять необходимые поля в SELECT. Кстати COUNT(*) тут не сработает, надо указать с какой таблицы его делать.
 
Код:
SELECT COUNT(*) AS count_num, news.name_news
FROM coment_news
LEFT JOIN news
ON news.id_news = coment_news.id_news
GROUP BY coment_news.id_news
ORDER BY count_num ASC
LIMIT 0 , 30
Как-то так, если переписать ваш запрос. Лефт джоины быстрее работают. Ну подставлять необходимые поля в SELECT. Кстати COUNT(*) тут не сработает, надо указать с какой таблицы его делать.

Ваш вариант проверил. Не удалось понять на сколько он быстр. У меня запросы выполняются в интервале от 0.0097 сек. до
0.05 сек. Хаотично и не поддаются анализу.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху