MySQL并没有按预期工作

时间:2017-03-26 22:39:06

标签: mysql where

首先,这是我尝试使用的查询。

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”语句用于获取每条消息的最新信息,因此如果最新日志具有已清除的数据库,则仍会包含旧消息。

2 个答案:

答案 0 :(得分:-1)

首先,我看到你在IN和括号之间有一个空格--MySQL“讨厌”它。修复它:

...AND convo_id IN(SELECT... 

但如果只是主题发布拼写错误,那么请分享您的数据(MessagesConversations的MySQL方案。

答案 1 :(得分:-1)

下面的语句返回一个行列表,其中您需要传递给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)