0
這不是一個如何優化以下速度查詢的問題,我知道可以進行一些改進,但是這與語句的功能有關,這似乎不是正確選擇數據。MySQL選擇順序的問題
問題:
下面的查詢應該從用戶名列表中選擇用戶,通過當他們最後一次傳遞消息(最前)進行排序。此列表中的某些用戶名將永遠不會被髮送,因此last_message_date
將爲NULL
。但是,當前語句會返回一條命令,將last_message_date
爲NULL的用戶放入已經發送消息的用戶(即,last_message_date包含日期)。
奇怪的是偶爾它會返回它正確排序,NULL先,其他時間不會。我在這裏撓頭。
代碼:
SELECT DISTINCT username
FROM `account_usernames`
WHERE (`in_progress` = 0)
AND (account_source IN
(SELECT DISTINCT `username`
FROM source_accounts
WHERE group_users = 'USA Based'
AND (`type` = 'users'
OR `type` = 'both')
AND `use` = '1'))
AND (username NOT IN
(SELECT user_tomsg
FROM `message_history`
WHERE owner_account = 'CurrentOwner'))
AND (username NOT IN
(SELECT DISTINCT `username`
FROM `follower_list`))
ORDER BY last_message_date LIMIT ?
FOR
UPDATE;
至於說,這個偶爾會優先考慮誰已經已經傳遞消息,上面誰從未傳遞消息的用戶。如果有人能夠從這個查詢中發現錯誤,我們將熱烈感謝回覆。使用ORDER BY
當
ORDER BY (last_message_date is null) desc,
last_message_date
的documentation是在哪裏NULL
s的放置清晰: