MySQL - ORDER BY,CASE和DESC
问题描述:
我有一个名为$ var的PHP变量。我想根据$ var对结果进行排序。这其中的工作原理:MySQL - ORDER BY,CASE和DESC
$sql = "
SELECT
myText1,
myText2,
someNumber
FROM myTable
ORDER BY
CASE
WHEN $var = 1 THEN myText1
WHEN $var = 2 THEN myText2
WHEN $var = 3 THEN someNumber
END";
但是当$ var为3我需要someNumber
与DESC
进行排序。所以我试过这个:
$sql = "
SELECT
myText1,
myText2,
someNumber
FROM myTable
ORDER BY
CASE
WHEN $var = 1 THEN myText1
WHEN $var = 2 THEN myText2
WHEN $var = 3 THEN someNumber DESC
END";
这一个抛出一个语法错误。我怎样才能做到这一点?
答
分为三个case
表达这样的:
ORDER BY (CASE WHEN $var = 1 THEN myText1 END) ASC,
(CASE WHEN $var = 2 THEN myText2 END) ASC,
(CASE WHEN $var = 3 THEN someNumber END) DESC
的ASC
是可选的,当然 - 只是与DESC
收缩。
更重要的是,这会消除自动转换。 A CASE
表达式只返回一种类型。当你混合不同的类型时,就会发生某种转换。该转换可能会影响值的排序。这解决了这个问题。
答
使用数学:
ORDER BY
CASE
WHEN $var = 1 THEN myText1
WHEN $var = 2 THEN myText2
WHEN $var = 3 THEN 1000000 - someNumber
END
答
情况下,只可以返回一个表情,这样你才会有几种情况:
CASE WHEN $var = 1 THEN myText1 END,
CASE WHEN $var = 2 THEN myText2 END,
CASE WHEN $var = 3 THEN someNumber END DESC
OR,优化
CASE
WHEN $var = 1 THEN myText1,
WHEN $var = 2 THEN myText2
END,
CASE WHEN $var = 3 THEN someNumber END DESC
快速而正确的答案。谢谢! :-) – MrPeperonny