|
|
|
| Есть таблица с новостями на сайте и Есть таблица с комментариями на сайте.
[b]Таблица с новостями:
id - ID новости
autor - Автор Новости, тип ВАРЧАР
date - Дата публикации, формат 2008-01-08 23:47:45
short_story - краткая новость
full_story - полная новость
|
Таблица с комментариями:
id - ID комментария
post_id - ID новости в которой размещен комментарий
user_id - ID пользователя
date - Дата публикации, формат 2008-01-08 23:47:45
autor - Автор комментария, тип ВАРЧАР
text - Текст комментария
|
Новость Комментарий
id = post_id
author = author
|
Задача:
Необходимо вывести 5 пользователей, которые опубликовали самое большее кол-во новостей и комментариев за сутки (приоритетом является кол-во новостей), в таком виде:
author | News | Coms
cernos 10 5
Vasya 5 3
Petya 3 10
Masha 3 9
Leonid 1 0
|
БУДУ ОЧЕНЬ БЛАГОДАРЕН ЗА РЕШЕНИЕ ДАННОЙ ЗАДАЧИ | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 00:13)
| | Нужна таблица с авторами.
То есть в принципе, конечно, не нужна.
Но для ненормализованной базы решать задачку лениво. :) | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 00:13)
| | Если вдруг нормализуете.
SELECT A.name, news_count, coms_count
FROM users_table AS A
LEFT JOIN (SELECT N.author AS news_user_id, count(N.id) AS news_count
FROM news_table
WHERE `date` > NOW() - INTERVAL 1 DAY
GROUP BY news_user_id
HAVING news_count > 0
) AS NC ON A.id = NC.news_user_id
LEFT JOIN (SELECT C.author AS coms_user_id, count(C.id) AS coms_count
FROM coms_table
WHERE `date` > NOW() - INTERVAL 1 DAY
GROUP BY coms_user_id
HAVING coms_count > 0
) AS CC ON A.id = CC.coms_user_id
ORDER BY news_count DESC, coms_count DESC
LIMIT 5;
|
PS. Между тем, поскольку полного внешнего соединения в MySQL нет, решать задачу для ненормализованной базы (т.е. без отдельной таблицы авторов) будет запарно. | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2008 в 01:59)
| |
Таблица пользователей:
email
password
name
user_id
user_group
lastdate
reg_date
banned
|
Таблица с пользователями называется: gal_user
Таблица с комментариями называется: gal_comments
Таблица с новостями называется: gal_news
Просьба сделать все для этих таблиц, т.к. не понимаю в запросе которые вы првиели, с какой таблицы и откуда берется. Спасибо заранее. Оч благодарен за помощь! | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 20:16)
| | авторы в таблицах новостей и коментариев должны быть INT и равны id'ам в таблице пользователей. | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2008 в 20:18)
| | Приравнивываю данные в таблицах
NEWS --- ---COMMENT --- --- AUTHOR
author = author = name
Хранятся в ВАРЧАР
Нет возможности выборки делать по идам, т.к. в таблице новостей нет такого поля, как ид. пользователя. | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 20:34)
| | UP | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 00:13)
| | Вот это сработает для текущей структуры базы, но об обптимальности здесь речь уже не идет.
select r.autor, r.news_count, count(c.id) as coms_count
from (
select a.autor, count(n.id) as news_count
from (
select distinct autor from news
union
select distinct autor from comments
where autor not in (
select distinct autor from news
)
) as a
left join news as n
on a.autor = n.autor
and n.`date` > (now() - interval 1 day)
group by a.autor
) as r
left join comments as c
on r.autor = c.autor
and c.`date` > (now() - interval 1 day)
group by r.autor
order by news_count desc, coms_count desc
limit 5
|
| |
|
|
|
|
|
|
|
для: Shiva
(10.02.2008 в 16:02)
| | Спасибо Всем, я все сделал конечно же не без вашей помощи.
Я разорался в этих лефт джоин, благодаря Вам и мануалу :) и сам написал запрос:
select tu.name, news, coms from users as tu
LEFT JOIN (
SELECT tn.autor, count(tn.id) as news
FROM news as tn
where `date` > NOW() - INTERVAL 1 DAY
GROUP BY autor
) as tn ON tu.name=tn.autor
LEFT JOIN (
SELECT tc.autor, count(tc.id) as coms
FROM comments as tc
where `date` > NOW() - INTERVAL 1 DAY
GROUP BY autor
) as tc ON tu.name=tc.autor;
|
Насчет лимитов и ордер бай я эт я допишу :) | |
|
|
|
|
|
|
|
для: cernos
(10.02.2008 в 22:11)
| | Да, все правильно. Я свой запрос писал, исходя из того, что таблицы пользователей не существует. | |
|
|
|
|
|
|
|
для: Shiva
(11.02.2008 в 00:11)
| | Я понял, твой запрос рабочий, спасибо и за него. Теперь буду знать как это все длается. :)
Без Вас я бы не решил данную задачу :) | |
|
|
|