2016-06-25 4 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

簡単な説明

は、ログインしているユーザーの変数は、$ユーザーが彼を削除すると、ユーザーが

SENDERIDまたは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としてラップしてみてください、特に拡大し複雑な条件で、将来のあいまいさを避けるために

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

を動作しているようです( '$ user' = senderIDとsenderdelete = 0)OR( '$ user' = receiverIDとreceiverdelete = 0) – DRapp

+0

私は自分のプログラミングの変更を@DRappに採用します。 –

関連する問題