2016-10-18 3 views
0

меня сообщений таблицу со следующими столбцами: id_message_parent,id_user_from,id_user_to,message,read_date,created,statusPHP-MySQL: группы по дает ошибку

Мне нужно выбрать последнее сообщение для пользователя, сгруппированные по id_message_parent и попробовал много, но все-запрос дает белую страницу смерть «500 ошибка сервера» или вернуть первый, чтобы не последний, как:

{"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",.....}]} 

Вот что я пробовал:

$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`"; 

в d более .... здесь РНР функция

$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)); 
} 
+2

какая ошибка? plz share, mysql_ * устарел и закрыт в php 7, если вы получаете белую страницу, что-то не так в вашем коде, возможно, у вас есть ошибка синтаксического анализа или фатальная для расширений. и я также надеюсь, что эта звездочка «* $ result» верна? – devpro

+1

Прежде всего, не используйте mysql. Он устарел. Используйте mysqli() –

+0

объясните свой вопрос и ожидайте. –

ответ

1

Я думаю, что вы не написали запрос должным образом в переменной $ SQL или может быть у вас ошибка в PHP коде.

Использование ниже запроса в PHPMyAdmin я думаю, что он будет решать ваши требования

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`"; 

Спасибо.

+0

скажите: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '(msg.id_user_to = 1 ИЛИ msg.id _user_from = 1) и msg.status = '0' GROUP BY msg.id_ 'в строке 1 –

+1

Я думаю, вы перепутались с скобками –

+0

еще ошибка в строке 3 –

Смежные вопросы