I am building a private messages system.
I want to get the latest message as per conversation time. Now it is showing the messages in chronological order but I want it in reverse-chronological manner, latest message on top and so on.
SELECT `messages`.`id`,
`messages`.`sender`,
`messages`.`receiver`,
`messages`.`message`,
`messages`.`datetime`,
`messages`.`classifield_id`
FROM `augl`.`messages`;
public function getMessageList()
{
$current_user = $this->accounts->getUserId();
$query = $this->db->query("SELECT * FROM(
SELECT id, LEAST(receiver) as receiver, LEAST(sender) AS sender, message, datetime, classifield_id
FROM messages
WHERE sender='$current_user' OR receiver = '$current_user'
Group By (if(sender > receiver, sender, receiver))
, (if(sender > receiver, receiver, sender))
)
as id");
$result = $query->result();
//var_dump($result); die;
foreach ($result as $messages )
{
$return[$messages->id] = $messages;
if ($messages->receiver === $current_user)
{
$return[$messages->id]->userr = $this->accounts->getUsername($messages->sender);
$return[$messages->id]->userid = $messages->sender;
//$return[$messages->id]->message = $messages->message;
}
else
{
$return[$messages->id]->userr = $this->accounts->getUsername($messages->receiver);
$return[$messages->id]->userid = $messages->receiver;
//$return[$messages->id]->message = $messages->message;
}
}
return $return;
}
It looks like if you change "LEAST" to "GREATEST" that may fix it.
See the tutorial in the MySQL Manual. you want GROUPWISE MAXIMUM obviously MIN and not MAX for your needs.