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

简要说明

比方说 *的登录用户$用户

在数据库中的用户可以是senderIDreceiverID

$用户删除变量自己对话中,他的消息从更新为 in senderdelete列或接收者删除列*

是问题是: -

我将要修改的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子句中添加这一点,它似乎是工作

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

完全更新的代码

$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

为了避免未来的歧义,特别是在扩大的复杂条件下,尽量为其中包装等('$ user'= senderID和senderdelete = 0)OR('$ user'= receiverID和receiverdelete = 0) – DRapp

+0

我将在我的编程中使用这些更改@DRapp。我很满意支持 –