2016-06-25 1 views
1

로그인 한 사용자의 ID에 따라 메시지를 그룹화하는 코드입니다. 코드는 그대로 작동합니다. 하지만 지금은 내가 아는하지 않는 일부 수정MySQL 쿼리, 가장 최근에 그룹별로 정렬 한 다음 조건으로 그룹화

내 쿼리 코드

$query_messages = mysqli_query($link,"SELECT 
     PreQuery.*, 
     m2.message, 
     m2.senderID, 
     m2.receiverID 
    from 
     (SELECT 
       if(m.senderID < m.receiverID, m.senderID, m.receiverID) as Person1, 
       if(m.senderID < m.receiverID, m.receiverID, m.senderID) as Person2, 
       max(m.messageID) as LastMessageIDPerChat, 
       max(m.date) as LastMessageDate 
      FROM 
       messages m 
      WHERE 
        '$user' IN (senderID, receiverID) 
      GROUP BY 
       Person1, 
       Person2 
      ORDER BY 
       m.date ASC 
      LIMIT 10) PreQuery 

     JOIN messages m2 
      on PreQuery.LastMessageIDPerChat = m2.messageID ORDER BY 
       date DESC"); 
$row_messages = mysqli_fetch_assoc($query_messages); 
$totalRows_messages = mysqli_num_rows($query_messages); 

DB 구조를 구현 할 수 있도록 할

enter image description here

간략한 설명

말할 수 있습니다 * 로그인 한 사용자 A가 데이터베이스에서 $ 사용자

$ 사용자가 삭제하면 하나

receiverID센더 또는 할 수있는 사용자에게 인의 변수 그의 그의 메시지는 에서 보낸 사람 삭제 열 또는 수신자 삭제 열 *

0123에서 업데이트됩니다.

는 문제가 있었다 : -

나는 MySQLI 쿼리 코드를 수정하고 쿼리

if $user is the sender then senderdelete should be value 0 

if $user is the receiver then receiverdelete should be value 0 

어떤 도움이를 추가 할 것인가?

답변

0

나는 where 절에서 이것을 추가하고, 특히 확장 복잡한 조건에

$query_messages = mysqli_query($link,"SELECT 
     PreQuery.*, 
     m2.message, 
     m2.senderID, 
     m2.receiverID, 
     m2.senderdelete, 
     m2.receiverdelete 
    from 
     (SELECT 
       if(m.senderID < m.receiverID, m.senderID, m.receiverID) as Person1, 
       if(m.senderID < m.receiverID, m.receiverID, m.senderID) as Person2, 
       max(m.messageID) as LastMessageIDPerChat, 
       max(m.date) as LastMessageDate 
      FROM 
       messages m 
      WHERE 
        '$myid' IN (senderID) AND senderdelete = 0 OR '$myid' IN (receiverID) AND receiverdelete = 0 

      GROUP BY 
       Person1, 
       Person2 
      ORDER BY 
       m.date ASC 
      LIMIT 10) PreQuery 

     JOIN messages m2 
      on PreQuery.LastMessageIDPerChat = m2.messageID ORDER BY 
       date DESC"); 
$row_messages = mysqli_fetch_assoc($query_messages); 
$totalRows_messages = mysqli_num_rows($query_messages); 
+1

미래의 모호성을 방지하기 위해

WHERE '$myid' IN (senderID) AND senderdelete = 0 OR '$myid' IN (receiverID) AND receiverdelete = 0 

전체 업데이트 된 코드를 작동하는 것 같군 WHERE 등의 포장 시도 ('$ user'= senderID 및 senderdelete = 0) 또는 ('$ user'= receiverID 및 receiverdelete = 0) – DRapp

+0

@ programm에 변경 사항을 적용합니다. @DRapp. –