MYSQL Group Самые последние по дате - PullRequest
0 голосов
/ 09 октября 2018

Я снова задаю этот вопрос, потому что в большинстве примеров есть какое-то странное объединение таблиц, которое не имеет смысла для меня.То, что я пытаюсь сделать, это вытащить самые последние письма по дате (в формате Ymd), но сгруппировать их по дате сообщения.

$query = "
SELECT * 
  FROM mail 
 WHERE ( receiver = '$username' OR sender = '$username' ) 
GROUP 
    BY date DESC
";

Это то, с чего я начал, но мне нужнополучить самое последнее значение по дате.Кто-нибудь знает, как это можно сделать, но сохраняет квалификаторы получателя и отправителя?

Структура таблицы: http://projecttranslation.org/cvlgbt/www/web/mail.pdf

Ответы [ 2 ]

0 голосов
/ 09 октября 2018
$query =
"SELECT * FROM mail m
    WHERE ( receiver = '$username' OR sender = '$username' )
    AND timestamp = ( select max(timestamp) from mail m2
                      WHERE ( receiver = '$username' OR sender = '$username' )
                      AND m.date = m2.date )";
0 голосов
/ 09 октября 2018

Предположительно, вам нужны строки с самой последней даты. Это не запрос агрегации! Это фильтрация:

SELECT m.*
FROM mail m
WHERE ? IN (m.receiver, m.sender) AND
      date = (SELECT MAX(m2.date)
              FROM mail m2
              WHERE (m2.receiver = m.sender AND m2.sender = ?) OR
                    (m2.sender = m.receiver AND m2.receiver = ?)
             );

Обратите внимание, что я изменил '$username' на правильный заполнитель для параметра (?).Ваша версия выглядит опасно близко к обработке строки запроса со строковым значением - что открывает запрос для внедрения SQL и может привести к очень сложным для отладки синтаксическим ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...