对于令人困惑的标题感到抱歉。无法想出更好的。
我的表消息包含字段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声明,但我正在寻找解决方案,我只知道谁不是来自谁的消息
答案 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
获取与to
和from
中的姓名匹配的数据:
SELECT *
FROM messages
WHERE `to` = 'Dave' AND
`from` = 'John'
ORDER BY id ASC;
或者你可以使用以下所有消息:
SELECT *
FROM messages
WHERE (`to` = 'Dave' AND
`from` = 'John') OR
(`to` = 'John' AND
`from` = 'Dave')
ORDER BY id ASC;
答案 1 :(得分:1)
SELECT * FROM message WHERE `to` = 'Dave'
AND `from` IN (SELECT MIN(`from`) FROM message WHERE `to` = 'Dave') ORDER BY id ASC;
这是你在找什么?
答案 2 :(得分:-2)
顺便说一下,你正在混合'(单引号)和'(后退)。 See Here
关于您的问题,您可以使用AND
轻松添加更多要求。
SELECT * FROM messages WHERE `to`='Dave' AND `from`='John' ORDER BY id ASC
现在它只显示来自John的消息!