如何通过两种不同的排序方式对MySQL结果进行排序?
首先,我为这个糟糕的问题标题道歉,我不能很好地解释我的问题是什么,但我相信有经验的MySQL用户会知道的 查询数据库以检索特定的客户集后,它们最初按“已完成”列排序,值为“0”和“1” 我想按交货日期ASC对值为“0”的所有客户进行排序,按交货日期DESC对值为“1”的所有客户进行排序 这是我第一次也是唯一一次失败的尝试:如何通过两种不同的排序方式对MySQL结果进行排序?,mysql,sorting,Mysql,Sorting,首先,我为这个糟糕的问题标题道歉,我不能很好地解释我的问题是什么,但我相信有经验的MySQL用户会知道的 查询数据库以检索特定的客户集后,它们最初按“已完成”列排序,值为“0”和“1” 我想按交货日期ASC对值为“0”的所有客户进行排序,按交货日期DESC对值为“1”的所有客户进行排序 这是我第一次也是唯一一次失败的尝试: mysql_query("SELECT * FROM users WHERE (completed='0' ORDER BY delivery ASC) AND (compl
mysql_query("SELECT * FROM users WHERE (completed='0' ORDER BY delivery ASC) AND (completed='1' ORDER BY delivery DESC)") or die(mysql_error());
这可以通过以下方式使用
子句中的case when
来实现
SELECT * FROM users
order by
case
when completed='0' then delivery
end,
case
when completed='1' then delivery
end desc;
如果您需要在顶部发送所有completed='0'
,假设没有空值,那么您可以执行以下操作
order by
completed,
case
when completed='0' then delivery
end,
case
when completed='1' then delivery
end desc;
这可以通过以下方式使用子句中的case when
来实现
SELECT * FROM users
order by
case
when completed='0' then delivery
end,
case
when completed='1' then delivery
end desc;
如果您需要在顶部发送所有completed='0'
,假设没有空值,那么您可以执行以下操作
order by
completed,
case
when completed='0' then delivery
end,
case
when completed='1' then delivery
end desc;
第一个排序字段是completed
ASC
-当然结束了
对于第二个字段,您可以使用一个表达式,使delivered
的值按需要排序。假设列delivered
的类型为DATE
或DATETIME
,UNIX\u TIMESTAMP(delivered)
是一个数字
对于completed='0'
按升序使用UNIX\u时间戳(已交付)
。对于已完成的“0”
,使用反数值(-UNIX\u TIMESTAMP(delivered)
)也已排序ASC
,结束将颠倒行的顺序
以下是查询:
SELECT *
FROM users
ORDER BY completed ASC,
CASE
WHEN completed = '0' THEN UNIX_TIMESTAMP(delivered) # ASC-ending
ELSE - UNIX_TIMESTAMP(delivered) # DESC-ending
END ASC
;
第一个排序字段是completed
ASC
-当然结束了
对于第二个字段,您可以使用一个表达式,使delivered
的值按需要排序。假设列delivered
的类型为DATE
或DATETIME
,UNIX\u TIMESTAMP(delivered)
是一个数字
对于completed='0'
按升序使用UNIX\u时间戳(已交付)
。对于已完成的“0”
,使用反数值(-UNIX\u TIMESTAMP(delivered)
)也已排序ASC
,结束将颠倒行的顺序
以下是查询:
SELECT *
FROM users
ORDER BY completed ASC,
CASE
WHEN completed = '0' THEN UNIX_TIMESTAMP(delivered) # ASC-ending
ELSE - UNIX_TIMESTAMP(delivered) # DESC-ending
END ASC
;
这几乎奏效了!但是它没有显示完成的0的第一个?@CraigyCraigo只需添加按完成的顺序,case…
这几乎有效!但它没有显示完成的0的第一个?CraigyCraigo只需添加按完成顺序,case…
列交付的类型是什么?列交付的类型是什么?有趣的选择,但我认为上面的答案更容易理解和使用。的确,它更清晰,而且无论交付的列类型如何,它都能正常工作。我的答案不适用于字符串。这是一个有趣的选择,但我认为上面的答案更容易理解和使用。事实上,它更清晰,而且无论交付的列类型如何,它都有效。我的不适用于弦。