我有这个问题:
select -- fields--
from myTable
where -- conditions --
order by myField if('param'='1' ,'desc','')
if('param'='1','desc',''):根据该参数,我想按升序或降序排序。 执行此查询,我收到此错误:
check the manual that corresponds to your MySQL server version for the right syntax to use near 'if('param'='1' ,'desc','')'
答案 0 :(得分:2)
喜欢什么?
select -- fields--
from myTable
where -- conditions --
order by CASE WHEN @param=1 THEN myField ELSE -myField END;
如果通常在存储过程中使用,则必须使用CASE / WHEN,如上所示。还有' param'没有意义,你可能想要@param。最后,不可能有条件地设置ASC / DESC,但可以通过取字段值的负数/正数来实现相同的目标。
答案 1 :(得分:1)
您可以使用CASE / WHEN结构:
set @param = 1;
SELECT * FROM `myTable`
ORDER BY
CASE WHEN @param = 1 THEN myField END ASC,
CASE WHEN @param = 2 THEN myField END DESC;
答案 2 :(得分:0)
您可以使用if.. else..
拆分2情况,并在不同条件下执行不同的阻止。
if(@param='1')
select -- fields--
from myTable
where -- conditions --
order by myField desc
else
select -- fields--
from myTable
where -- conditions --
order by myField
答案 3 :(得分:0)
从参数中删除引号,然后删除:
select -- fields--
from myTable
where -- conditions --
order by if(param ='1') desc
如果您的参数是例如int或数字,也请从值中删除引号:
... if(param =1) desc