I have messages table with the following columns: id_message_parent,id_user_from,id_user_to,message,read_date,created,status
I need to select the last message for a user grouped by id_message_parent
and tried a lot but all query gives white page of death "500 server error" or return the first in order not last like:
{"messages":[{"id_message":"1","id_message_parent":"1","id_user_from":"1","id_user_to":"2","message":"\u0645\u0631\u062d\u0628\u0627 \u0627\u0646\u0627 \u0645\u0633\u062a\u062e\u062f\u0645 1","read_date":null,"created":"2016-10-17 18:13:39","status":"0"}]}
//while it should be
{"messages":[{"id_message":"2","id_message_parent":"1",.....}]}
Here is what I have tried:
$sql="SELECT *, max(id_message) as max_id FROM `messages` WHERE (`id_user_to`='".$id_user."' OR `id_user_from`='".$id_user."') and `status`='".$status."' GROUP BY `id_message_parent`";
$sql="select * from `messages` where `id_message` in(SELECT *, max(id_message) as max_id FROM `messages` WHERE (`id_user_to`='".$id_user."' OR `id_user_from`='".$id_user."') and `status`='".$status."' GROUP BY `id_message_parent`) x";
$sql="SELECT * FROM `messages` WHERE `id_message` IN (SELECT MAX(id_message) FROM `messages` WHERE (`id_user_to`='".$id_user."' OR `id_user_from`='".$id_user."') and `status`='".$status."') ORDER BY id DESC";
$sql="SELECT * FROM (SELECT * FROM `messages` WHERE `id_user_to`='".$id_user."' OR `id_user_from`='".$id_user."' ORDER BY id DESC) a GROUP BY IF(`id_user_to` = '".$id_user."', `id_user_from`, `id_user_to`)";
$sql="SELECT `id_message`, `id_message_parent`, `id_user_from`, `id_user_to`, `message`, `read_date`, `created`, `status`, GROUP_CONCAT(`id_message`, ',') FROM `messages` GROUP BY `id_message_parent`";
and more.... here is the php function
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0){
$messgs=array();
while ($messgs_info= mysql_fetch_array($result)){
$info = new Messages();
$info->id_message=$messgs_info['id_message'];
$info->id_message_parent=$messgs_info['id_message_parent'];
$info->id_user_from=$messgs_info['id_user_from'];
$info->id_user_to=$messgs_info['id_user_to'];
$info->message=$messgs_info['message'];
$info->read_date=$messgs_info['read_date'];
$info->created=$messgs_info['created'];
$info->status=$messgs_info['status'];
array_push($messgs, $info);
}
echo json_encode(array('messages' => $messgs));
}
I think you have not written query properly in $sql variable or might be u have an error in PHP code.
Use below query in phpmyadmin i think it will solve your requirement
SELECT msg.* FROM (
SELECT * FROM message ORDER BY created DESC) as msg
(msg.`id_user_to`= 2 OR msg.`id_user_from`= 1 ) and msg.`status`= '0'
GROUP BY msg.`id_message_parent`";
Thanks.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.