Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка строк по второй таблице
 
 автор: neadekvat   (20.01.2010 в 19:30)   письмо автору
 
 

Доброго времени суток.
Есть две таблицы (условно):
story
id | tite | text
comments
id | story_id | text | published

Нужно отсортировать строки из story по количеству комментариев к каждой, при том учитываются только те комментарии, где published = 1.
Буду благодарен за помощь.

  Ответить  
 
 автор: а-я   (20.01.2010 в 20:09)   письмо автору
 
   для: 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

  Ответить  
 
 автор: neadekvat   (20.01.2010 в 21:17)   письмо автору
 
   для: а-я   (20.01.2010 в 20:09)
 

Благодарю!
Работает :о)
Надо учиться sql((

  Ответить  
 
 автор: neadekvat   (21.01.2010 в 16:35)   письмо автору
 
   для: neadekvat   (20.01.2010 в 19:30)
 

Решил не создавать новую тему.

Есть таблица комментариев - comments, в ней столбец add_date (какой формат - еще не знаю, будет тот, который больше подходит для решения. Но, наверное, date - так хоть высчитывать что-то можно)
Нужно посчитать, какое количество комментариев было оставлено пользователем (author_id) в течении года каждый месяц. В результате должно выйти что-то такое:
month        | count
Январь 2009       10
Февраль 2009      5
Март 2009            7
...
Январь 2010         12

В принципе, можно сделать 12 простых запросов. Но есть ли способ не насиловать так сервер? (тем более, что такое же надо будет повторить еще два раза - 36 запросов ради одной таблицы, по-моему, накладно)

  Ответить  
 
 автор: Trianon   (21.01.2010 в 16:50)   письмо автору
 
   для: neadekvat   (21.01.2010 в 16:35)
 

Так а GROUP BY Year_Month напрашивается же!

  Ответить  
 
 автор: neadekvat   (21.01.2010 в 17:18)   письмо автору
 
   для: Trianon   (21.01.2010 в 16:50)
 

Мы с GROUP BY как бараны на новые ворота друг на друга смотрим.
Никак в нем разобраться не могу.
То есть считаем количество COUNT(id), где автор_ид = 1, и группируем GROUP BY MONTH(add_date) ?

  Ответить  
 
 автор: neadekvat   (21.01.2010 в 17:47)   письмо автору
 
   для: 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

Во что родил :о)
Удобоваримо?

  Ответить  
 
 автор: Trianon   (21.01.2010 в 23:16)   письмо автору
 
   для: 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

Хотя группировка по составному ключу тоже допустима.

  Ответить  
 
 автор: neadekvat   (21.01.2010 в 19:03)   письмо автору
 
   для: 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
Если менять название таблицы, все работает, да.. но как объединить эти запросы?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования