2016-12-13 4 views
1

に従って降順私はこのクエリがあります場合には( 'PARAM' = '1'、 'DESC' '')選択昇順またはパラメータ

select -- fields-- 
from myTable 
where -- conditions -- 
order by myField if('param'='1' ,'desc','') 

:そのPARAMによれば、Iたいです昇順または降順ソート。このクエリを実行する が、私はこのエラーを取得する:

check the manual that corresponds to your MySQL server version for the right syntax to use near 'if('param'='1' ,'desc','')' 

答えて

1

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

ような何か?

select -- fields-- 
from myTable 
where -- conditions -- 
order by CASE WHEN @param=1 THEN myField ELSE -myField END; 

通常、ストアドプロシージャ内で使用される場合は、上記のようにCASE/WHENを使用する必要があります。また、 'param'は意味をなさないので、おそらく@paramが必要です。最後に、条件付きでASC/DESCを設定することはできませんが、同じ目的はフィールド値の負/正を取ることによって達成できます。

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 
+0

CASE/WHEN構造を使用できますが、このc odeスニペットが質問を解決するかもしれませんが、[説明を含めて](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – DimaSan

0

のparamから、これに引用符を削除します。

select -- fields-- 
    from myTable 
    where -- conditions -- 
    order by if(param ='1') desc 
をそして、あなたのparamは例えばintや数であれば、また値から引用符を削除します。

... if(param =1) desc 
関連する問題