[英]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.