2016-07-13 3 views
0

Я пытаюсь работать с простой системой обмена сообщениями. Это страница, содержащая последнее сообщение, отправленное каждым пользователем. Это мой столГруппа по имени таблицы desc not working

-message

id person1 person2 message mess_date 
1 2  q  hii  2016-07-11 00:00:00.000000 
2 q  2  hello 2016-07-10 00:00:00.000000 
3 2  q  how r u 2016-07-12 00:00:00.000000 
4 2  1  message 2016-07-10 00:00:00.000000 
5 q  2  nooooo 2016-07-13 00:00:00.000000 

-login

id roll 
1 q 
2 1 
3 2 

Теперь я пытаюсь извлечь сообщения, используя этот запрос -

suppose $roll="2"; 
select login.roll as userid, m1.id, m1.message, m1.mess_date 
from message as m1,login 
where (
    (m1.person1=? and login.roll=m1.person2) or 
    (m1.person2=? and login.roll=m1.person1) 
) 
group by login.roll 
order by m1.mess_date desc'); 
$stmt->bind_param('ss', $roll, $roll); 

выход имеет 2 результаты:

q - hiii - 2016-07-11 00:00:00.000000 
1 - message - 2016-07-10 00:00:00.000000 

Но я хочу, чтобы заказать по mess_date т.е.

q - nooooo - 2016-07-13 00:00:00.000000 
1 - message - 2016-07-10 00:00:00.000000 

ответ

1

Ваш SQL группа не используется должным образом, попробуйте выполнить следующие действия:

Предположим, идентификатор всегда растет во времени, в противном случае вам нужно сделать через max (mess_date):

SELECT msg1.* 
FROM (
    SELECT login.roll AS userid, m1.id, m1.message, m1.mess_date 
    FROM message AS m1,login 
    WHERE (
     (m1.person1=? AND login.roll=m1.person2) OR 
     (m1.person2=? AND login.roll=m1.person1) 
    ) 
) AS msg1, (
    SELECT msg.userid, max(msg.id) AS maxid 
    FROM (
     SELECT login.roll AS userid, m1.id, m1.message, m1.mess_date 
     FROM message AS m1,login 
     WHERE (
      (m1.person1=? AND login.roll=m1.person2) OR 
      (m1.person2=? AND login.roll=m1.person1) 
     ) 
    ) AS msg 
    GROUP BY userid 
) AS msg2 
WHERE msg1.userid = msg2.userid 
AND msg1.id = msg2.maxid 
ORDER BY msg1.mess_date DESC 

$stmt->bind_param('ssss', $roll, $roll, $roll, $roll); 
+0

ВЫ БОЛЬШИЕ !!!!!! Это сработало. –