use*_*672 0 php mysql sql select sql-order-by
我在线查看,但我只能找到两个相同的 查询order by.
第一个查询:
SELECT
Name
, Priority
FROM Music
WHERE `Priority` > 0 AND `date` > '2014-10-27 20:04:25'
ORDER BY `Priority` DESC
Run Code Online (Sandbox Code Playgroud)
第二个查询:
SELECT
Name
, Priority
FROM Music
WHERE `Priority` = 0 AND `date` > '2014-10-27 20:04:25'
ORDER BY `date`
Run Code Online (Sandbox Code Playgroud)
我需要将第一个和第二个查询合并为一个,执行第一个查询,然后执行第二个查询,给出一个完整的列表.
不仅是1个查询...优先级都是>或= 0
select Name, Priority
from Music
where `Priority` >= 0
AND `date` > '2014-10-27 20:04:25'
order by `Priority` DESC, `date`
Run Code Online (Sandbox Code Playgroud)
你可以使用union all运营商.不幸的是,union [all]不允许order by对每个查询应用一个子句,因此需要一些技巧.例如,您可以order by在子查询中"隐藏" 子句:
SELECT *
FROM (SELECT Name, Priority
FROM Music
WHERE `Priority` > 0 AND `date` > '2014-10-27 20:04:25'
ORDER BY `Priority` DESC) t
UNION ALL
SELECT *
FROM (SELECT Name, Priority
FROM Music
WHERE `Priority` = 0 AND `date` > '2014-10-27 20:04:25'
ORDER BY `date`) s
Run Code Online (Sandbox Code Playgroud)