[英]MySQL AND not working as expected
首先,这是我要使用的查询。
SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND
timestamp_added =
(select max(timestamp_added) from Messages t2
where
t2.author = t.author AND
t2.body = t.body AND
t2.timestamp = t.timestamp AND
t2.timestamp_added <= ?
) AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
该代码在没有以下行的情况下可以正常工作,但是有了它,它返回0个结果。
AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
我还验证了上面的行是独立运行的,并在基本的SELECT *查询上进行了测试。 我还确保数据库中有满足最高级查询的行。
数据是Skype消息的日志。 日志是随机抽取的; 目标是获取仍在数据库中的最新日志。 目的是能够绘制我的Skype消息并做其他有趣的事情。 Skype会在我的计算机上清除较旧消息的数据库。 长的“ timestamp_added”语句用于获取每条消息的最新消息,因此,如果最新日志具有已清除的数据库,则仍将包含旧消息。
我首先看到的是,IN和括号之间有一个空格-MySQL“讨厌”它。 像这样修复它:
...AND convo_id IN(SELECT...
但是,如果仅是发布拼写错误的主题,那么请共享您的数据(MySQL的Messages
and Conversations
方案)。
下面的语句返回一个行列表,其中需要传递给IN()函数的是CSV。
(SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?)
因此,改为使用GROUP_CONCAT()
(SELECT GROUP_CONCAT(convo_id) FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=? GROUP BY convo_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.