|
|
|
| Доброго времени суток.
Есть две таблицы (условно):
story
id | tite | text
comments
id | story_id | text | published
Нужно отсортировать строки из story по количеству комментариев к каждой, при том учитываются только те комментарии, где published = 1.
Буду благодарен за помощь. | |
|
|
|
|
|
|
|
для: neadekvat
(20.01.2010 в 19:30)
| | наверно что-то в этом роде
SELECT
a.*,
COUNT(b.`id`) AS `comm`
FROM
`story` a
LEFT JOIN
`comments` b
ON
b.`story_id` = a.`id`
AND
b.`published` = 1
GROUP BY a.`id`
ORDER BY `comm` DESC
|
| |
|
|
|
|
|
|
|
для: а-я
(20.01.2010 в 20:09)
| | Благодарю!
Работает :о)
Надо учиться sql(( | |
|
|
|
|
|
|
|
для: neadekvat
(20.01.2010 в 19:30)
| | Решил не создавать новую тему.
Есть таблица комментариев - comments, в ней столбец add_date (какой формат - еще не знаю, будет тот, который больше подходит для решения. Но, наверное, date - так хоть высчитывать что-то можно)
Нужно посчитать, какое количество комментариев было оставлено пользователем (author_id) в течении года каждый месяц. В результате должно выйти что-то такое:
month | count
Январь 2009 10
Февраль 2009 5
Март 2009 7
...
Январь 2010 12
|
В принципе, можно сделать 12 простых запросов. Но есть ли способ не насиловать так сервер? (тем более, что такое же надо будет повторить еще два раза - 36 запросов ради одной таблицы, по-моему, накладно) | |
|
|
|
|
|
|
|
для: neadekvat
(21.01.2010 в 16:35)
| | Так а GROUP BY Year_Month напрашивается же! | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 16:50)
| | Мы с GROUP BY как бараны на новые ворота друг на друга смотрим.
Никак в нем разобраться не могу.
То есть считаем количество COUNT(id), где автор_ид = 1, и группируем GROUP BY MONTH(add_date) ? | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 16:50)
| |
SELECT COUNT(id) AS count, MONTH(add_date) AS month, YEAR(add_date) AS year
FROM comments WHERE author_id = 2
GROUP BY month, year
|
Во что родил :о)
Удобоваримо? | |
|
|
|
|
|
|
|
для: neadekvat
(21.01.2010 в 17:47)
| | В принципе - да.
Но учитывая, что в строке 2010-01-21 год и месяц помещены в левые 2010-01 семь символов, я бы написал проще:
SELECT COUNT(id) AS count, LEFT(add_date, 7) AS ym,
FROM comments WHERE author_id = 2
GROUP BY ym
ORDER BY ym
|
Хотя группировка по составному ключу тоже допустима. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2010 в 16:50)
| | Так, ну, допустим, список месяцев и комментариев вывести удалось.
SELECT COUNT(id) AS count, MONTH(add_date) AS month, YEAR(add_date) AS year
FROM comments
WHERE author_id = {$_SESSION['user_id']}
AND
(YEAR(CURRENT_DATE) - YEAR(add_date) = 1
AND
MONTH(add_date) - MONTH(CURRENT_DATE) >= 0)
OR
(YEAR(CURRENT_DATE) - YEAR(add_date) = 0
AND
MONTH(CURRENT_DATE) >= MONTH(add_date))
GROUP BY year, month
|
Мне нужно еще из двух таблиц достать - marks и story
Если менять название таблицы, все работает, да.. но как объединить эти запросы? | |
|
|
|