仅提取具有特定值的数据

时间:2013-08-09 18:18:49

标签: mysql

对于令人困惑的标题感到抱歉。无法想出更好的。

我的表消息包含字段id,from,to,message

让我们说约翰和内特有来自戴夫的消息

所以它看起来像那样

id|from|to|message
1|John|Dave|Hey    
2|Nate|Dave|Yooo    
3|John|Dave|Sup    
4|Nate|Dave|Waazza

想象一下,他们中有更多。

好的我想为Dave提取消息,我这样做

SELECT * FROM messages WHERE ˙to` = 'Dave' ORDER BY id ASC

一切都很好,但这会显示来自 John Nate 的消息。

有没有办法只能从其中一个(一个)中提取消息?就像我只从John那里提取消息一样。

我知道做了另一个WHERE声明,但我正在寻找解决方案,我只知道谁不是来自谁的消息

3 个答案:

答案 0 :(得分:1)

在不知道from的情况下,您可以使用子查询,例如:

SELECT * 
    FROM messages 
   WHERE `to` = 'Dave' AND 
         `from` = (SELECT `from` 
                     FROM messages 
                    WHERE `to` = 'Dave'
                    LIMIT 1)
ORDER BY id ASC;

使用MIN:

SELECT * 
    FROM messages 
   WHERE `to` = 'Dave' AND 
         `from` = (SELECT MIN(`from`)
                     FROM messages 
                    WHERE `to` = 'Dave'
                    LIMIT 1)
ORDER BY id ASC;

使用MAX:

SELECT * 
    FROM messages 
   WHERE `to` = 'Dave' AND 
         `from` = (SELECT MAX(`from`)
                     FROM messages 
                    WHERE `to` = 'Dave'
                    LIMIT 1)
ORDER BY id ASC;

在子查询中,您可以使用MAX / MIN函数来区别。

Live DEMO of all the above queries.

注意:您知道要查找邮件的2个人的姓名。

您可以使用AND获取与tofrom中的姓名匹配的数据:

  SELECT * 
    FROM messages 
   WHERE `to` = 'Dave' AND
         `from` = 'John' 
ORDER BY id ASC;

Live DEMO.

或者你可以使用以下所有消息:

  SELECT * 
    FROM messages 
   WHERE (`to` = 'Dave' AND
         `from` = 'John') OR
         (`to` = 'John' AND
         `from` = 'Dave')
ORDER BY id ASC;

Live DEMO.

答案 1 :(得分:1)

SELECT * FROM message WHERE `to` = 'Dave' 
AND `from` IN (SELECT MIN(`from`) FROM message WHERE `to` = 'Dave') ORDER BY id ASC; 

这是你在找什么?

Demo

答案 2 :(得分:-2)

顺便说一下,你正在混合'(单引号)和'(后退)。 See Here

关于您的问题,您可以使用AND轻松添加更多要求。

SELECT * FROM messages WHERE `to`='Dave' AND `from`='John' ORDER BY id ASC

现在它只显示来自John的消息!