Агрегатные функции MYSQL, получающие значение в одной строке - PullRequest
0 голосов
/ 20 февраля 2012
$query = mysql_query("SELECT *, MAX(date_time) FROM messages 
                      WHERE user_to='$current_user' OR user_from='$current_user'
                      GROUP BY conversation 
                      ORDER BY date_time DESC LIMIT 0,5") or die(mysql_error());

echo $message['MAX(date_time)'];

Как я могу отобразить столбец 'content', который находится в той же строке, что и выбранная здесь date_time, чтобы время совпадало с сообщением?Будет ли это что-то вроде

echo $message['MAX(content)'];

Я пытаюсь создать «сообщения» в группах (называемые разговорами) и хочу отобразить самое последнее сообщение.В настоящее время отображается самое последнее время, но не самое последнее сообщение.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 20 февраля 2012

Если в вашей таблице есть столбец идентификатора autoincrement для использования в качестве идентификатора сообщения, то наибольшее значение идентификатора также должно быть последним сообщением в диалоге

1 голос
/ 20 февраля 2012

Попробуйте ниже:

SELECT * from messages as ts
LEFT JOIN (select max(id) as maxid from messages group by date_time) as tsm
ON ts.id=tsm.maxid  
WHERE (ts.user_to='$current_user' OR ts.user_from='$current_user')
ORDER BY ts.date_time DESC LIMIT 0,5

Предполагая, что id равен primary ключевой столбец в вашей таблице сообщений

0 голосов
/ 20 февраля 2012

Если у вас есть автоинкрементный ключ, вы можете попробовать:

$query = mysql_query("SELECT * FROM messages as m
                      WHERE user_to='$current_user' OR user_from='$current_user' AND 
                            id IN (SELECT MAX(id) FROM messages as m2 GROUP BY m2.conversation)
                      ORDER BY date_time DESC LIMIT 0,5") or die(mysql_error());
0 голосов
/ 20 февраля 2012

Заказывайте сообщения по дате и времени и принимайте только первый кортеж (LIMIT 1).Я не понимаю, почему вы агрегируете, если вам просто нужен последний кортеж из сообщений.Возможно, вы сможете уточнить это и предоставить дополнительную информацию о таблице.

SELECT content, date_time
FROM messages
WHERE user_to='$current_user' OR user_from='$current_user'
ORDER BY date_time DESC
LIMIT 1
...