GROUP BY ORDER BY Help - PullRequest
       4

GROUP BY ORDER BY Help

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

Следующий код работает, но я хочу, чтобы группы показывали свой последний запрос по дате и времени, а не первый запрос по времени.Я попытался изменить порядок ORDER BY по сравнению с ASC / DESC, но это просто меняет порядок всех групп, а не данных внутри групп.Мне нужно, чтобы все внутренние данные групп и всех групп были упорядочены по самой последней дате.

$query="SELECT * FROM emails 
        WHERE sentto='$sid' 
        GROUP BY sentto 
        ORDER BY datetime DESC LIMIT $eu, $limit ";

Вместо того, чтобы показывать группы и упорядочивать их по первому запросу:Сообщение от Сэма Ричардса от 22 января 2011 года (это группа)Сообщение от Джона Смита 5 января 2011 г. (это группа)

Я хочу, чтобы он отображал группы и упорядочивал их по последнему запросу:Сообщение от Джона Смита 19 апреля 2011 года (это группа)Сообщение Сэма Ричардса от 10 марта 2011 года (это группа)

Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Я думаю, что частью вашей проблемы является то, что вы выбираете неагрегированные столбцы с групповым запросом. Вы должны четко указать, какие значения вы хотите вернуть в совокупном результате запроса.

SELECT sentto, MAX(datetime) AS datetime FROM emails
  GROUP BY sentto
  ORDER BY datetime desc LIMIT $eu, $limit;

Я все еще не уверен, что это дает вам то, что вы хотите. Похоже, вы хотите на самом деле получить строки для каждого отдельного электронного письма и просто использовать максимум GROUP BY для сортировки. Чтобы сделать это, вам, вероятно, потребуется выполнить вышеуказанный запрос, а затем вернуться и выполнить второй запрос для каждого отправленного сообщения. Я не могу придумать способ сделать это одним запросом.

SELECT * FROM emails
  WHERE sentto=$sid
  ORDER BY datetime DESC;

(Для каждого отправленного в первый запрос).

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

Как насчет:

ORDER BY sentto ASC, datetime DESC
0 голосов
/ 20 апреля 2011

Для сортировки данных по группам необходимо включить sentto в предложение ORDER BY.

Попробуйте это:

SELECT * FROM emails 
            WHERE sentto='$sid' 
            GROUP BY sentto 
            ORDER BY sentto, datetime DESC LIMIT $eu, $limit 
...