2017-03-04 63 views
1

好的,所以我试图从MySQL中选择唯一的值,但我并没有成功。所有用户从SQL中选择唯一值

查询

SELECT DISTINCT private_messages.*, 
        users.ID AS userID, 
        users.username AS username, 
        profiles.img_url AS profileImage 
        FROM private_messages 
        INNER JOIN users ON users.username = private_messages.receiver 
        INNER JOIN profiles ON profiles.userID = users.ID 
       WHERE private_messages.sender ='Admin' 
       ORDER BY private_messages.sent_at DESC 

现在的问题是收到

基本上我试图让最后一封邮件的用户,我想,只选择接收最后的消息,不是所有的人

当前结果

enter image description here

我想实现什么?

  • 只有消息新显示。我不能使用限制1,因为我得到所有用户的信息(从所有用户发送)
+0

,那么为什么你在查询中使用'private_messages.sender =“管理员”'?你必须使用'private_messages.receiver ='bla''不应该? –

回答

1

您shoudd筛选MAX(ID)

SELECT DISTINCT private_messages.*, 
       users.ID AS userID, 
       users.username AS username, 
       profiles.img_url AS profileImage 
       FROM private_messages 
       INNER JOIN users ON users.username = private_messages.receiver 
       INNER JOIN profiles ON profiles.userID = users.ID 
      WHERE private_messages.sender ='Admin' 
      AND private_messages.id in (select max(id) 
        from private_messages group by sender 
    )     
    ORDER BY private_messages.sent_at DESC 
+0

谢谢! –

0

如果我理解正确的,如果你有用户bla为接收者用户,您需要获取所有用户为他发送的所有最新消息。

如果是的话,如果你想“从所有用户收到的最后一封邮件用户”试试这个

SELECT private_messages.*, 
      users.ID AS userID, 
      users.username AS username, 
      profiles.img_url AS profileImage 
FROM private_messages INNER JOIN (
    SELECT MAX(id) as maxid from private_messages 
    where receiver = 'bla' 
    group by sender 
) m 
ON private_messages.id = m.maxid 
INNER JOIN users ON users.username = private_messages.sender 
INNER JOIN profiles ON profiles.userID = users.ID 
ORDER BY private_messages.sent_at DESC