2014-09-04 6 views
0

Я пытаюсь получить последний результат каждого разговора между двумя пользователями без преобладания. Я посмотрел на несколько примеров в Интернете, таких, какПолучите MAX-результаты сообщений pm

[php Mysql Grouping and Ordering user messages together

И более продвинутом запрос

[GROUP BY messages MySQL

Моя структура базы данных ниже. Мои разговоры основаны на получении идентификаторов обоих message_creator и message_target, чтобы связать их в один чат.

message_id, 
message_content, 
message_target, 
message_creator, 
message_status, 
message_time 

мне нужно message_status также выбрать 1 и 2 в запросе, так что если пользователь прочитал последнее сообщение все еще показывает, как последнее сообщение в беседе.

Вот запрос, который у меня есть.

$callmessage=" SELECT message_id,MAX(message_content) AS message_content ,message_target,message_status,message_creator,message_throughurl,MAX(message_time) AS message_time FROM messages WHERE message_target='$user1_id' OR message_creator='$user1_id' AND message_status=1 OR message_status=2 
    Group By 
    (if(message_creator > message_target, message_creator,message_target)) 
    ,(if(message_creator > message_target, message_target,message_creator)) 
    ORDER BY message_id DESC"; 

ответ

0

Если вы хотите, чтобы получить самое последнее сообщение между двумя пользователями, то это должно работать:

SELECT * 
FROM messages 
WHERE ( 
    (message_creator='$user1_id' AND message_target='$user2_id') 
    OR 
    (message_creator='$user2_id' AND message_target='$user1_id') 
) 
AND message_status IN (1,2) 
ORDER BY message_id DESC 
LIMIT 1 
+0

Я не пользуюсь user2_id. Также вы удалили группу сообщениями, и это является источником моей проблемы. Мне нужно получить последнее message_id каждой группы – dave

0

Ok. Я работал и работал. Это то, что я сделал с моим запросом, всего несколько маленьких бит для добавления.

$user1_id= mysqli_real_escape_string($mysqli,$_SESSION['id']); 
$callmessage=" SELECT * FROM messages WHERE message_id IN 
    (SELECT MAX(message_id) AS message_id FROM 
    (SELECT message_id, message_creator AS id_with 
    FROM messages 
    WHERE message_target = '$user1_id' 
    UNION ALL 
    SELECT message_id, message_target AS id_with 
    FROM messages 
    WHERE message_creator= '$user1_id') t 
    GROUP BY id_with)"; 
Смежные вопросы