2014-09-04 3 views
0

나는 두 명의 사용자간에 각 대화의 최종 결과를 얻기 위해 노력하고 있습니다. 나는pm 메시지의 최대 결과 얻기

[php Mysql Grouping and Ordering user messages together

[GROUP BY messages MySQL

내 데이터베이스 구조 아래의 고급 쿼리로 온라인과 같은 몇 가지 예를 살펴 보았다. 대화 내용은 모두 message_creatormessage_target의 ID를 하나의 채팅으로 연결하는 것에 의존합니다.

message_id, 
message_content, 
message_target, 
message_creator, 
message_status, 
message_time 

나는 사용자가 마지막 메시지를 읽기가 여전히 대화로 마지막 메시지를 보여줍니다 그래서 만약 또한 쿼리에서 1과 2를 선택 message_status이 필요합니다.

여기에 현재있는 쿼리가 있습니다. 두 사용자 간의 매우 마지막 메시지를 얻고 싶다면

$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

좋아. 나는 그것을 해결하고 그 일을했습니다. 이것이 내 쿼리로 수행 한 작업이며 추가 할 몇 가지 사항입니다.

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