根据参数选择升序或降序

时间:2016-12-13 11:30:55

标签: mysql

我有这个问题:

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','')' 

4 个答案:

答案 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