Php MySQL选择排序的问题
这不是如何优化下面的查询以提高速度的问题,我知道可以进行一些改进,但这与语句的功能有关,它似乎没有正确地选择数据 问题:Php MySQL选择排序的问题,php,mysql,sql,Php,Mysql,Sql,这不是如何优化下面的查询以提高速度的问题,我知道可以进行一些改进,但这与语句的功能有关,它似乎没有正确地选择数据 问题: SELECT DISTINCT username FROM `account_usernames` WHERE (`in_progress` = 0) AND (account_source IN (SELECT DISTINCT `username` FROM source_accounts WHERE grou
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;
下面的查询应该从用户名列表中选择用户,并按上次发送消息的时间(最早的时间)对其排序。此列表中的某些用户名从未发送过消息,因此,last\u message\u date
将为NULL
。但是,当前语句返回一个顺序,该顺序将已发送消息的用户(即,last_message_date包含日期)置于具有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;
如前所述,这偶尔会优先考虑已经发过消息的用户,而不是从未发过消息的用户。如果任何人都能从这个查询中发现错误,我们将非常感谢您的回复。如果您首先想要
NULL
值,那么请在顺序中明确说明:
ORDER BY (last_message_date is null) desc,
last_message_date
使用
订购人时,NULL
s的位置清晰可见:
ORDER BY (last_message_date is null) desc,
last_message_date
在按进行排序时,如果执行,则首先显示NULL
值
按……订购。。。ASC
和最后一个,如果您按。。。描述
使用ASC
或DESC
可能是您在这些值的位置上看到的差异的原因