Простой вопрос MYSQL запросов - PullRequest
2 голосов
/ 17 апреля 2011
    SELECT t.thread_id, t.subject, u.username,
    COUNT(p.post_id) - 1 AS responses, 
    MAX(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS last,
    MIN(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS first
    FROM threads AS t
    INNER JOIN posts AS p USING (thread_id)
    INNER JOIN users AS u ON t.user_id = u.user_id
    WHERE t.cat_id = 1
    GROUP BY (p.thread_id) ORDER BY last DESC

Я думал, что сделал все правильно, однако мой запрос возвращает только одну строку, у меня 4 строки, где t.cat_id = 1. Есть идеи?

РЕДАКТИРОВАТЬ ** ОБРАЗЦЫ ДАННЫХ http://i56.tinypic.com/f1e449.png

Сейчас я получаю только один результат:

1  THREAD1  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM

Я ожидал получить что-то вроде:

1  THREAD1  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM
2  THREAD2  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM
3  THREAD3  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Скорее всего, в одной из таблиц соединения нет соответствующих строк:

INNER JOIN posts AS p USING (thread_id)
INNER JOIN users AS u ON t.user_id = u.user_id

Другая возможность (не взаимоисключающая первое) состоит в том, что предложение группировки объединяет строки.

0 голосов
/ 17 апреля 2011

Вы выбрали t.thread_id, но группируете по p.thread_id.

Измените group by на

GROUP BY (t.thread_id) ORDER BY last DESC  
          ^                              
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...