1

別のテーブルオーダーASCまたはDESCから照会された値に基づいて欲しい。

だからこのようなもの:

SELECT *
FROM table
ORDER BY 
    CASE (SELECT sorting from table2 WHERE table2.id = ?)
        WHEN 1 THEN table.date ASC END 
        WHEN 0 THEN table.date DESC END
    END

MySQLで利用できるようなものはありますか?

私はMS-SQLServerについていくつかの解決策を見てきました:ascとdescの2つのSQLフィールドを動的に順序付ける方法

編集:私はちょうど私が説明を間違えたのを見ました、修正されました。

4

2 に答える 2

3
order by if((select sorting from table2 where table2.id = ?) = 1,
  unix_timestamp(table.date), -unix_timestamp(table.date))

列が数値の場合、否定は機能します。文字列の場合、高い値を低い値にマップする別の関数を見つけることができるかもしれません...

于 2012-10-25T18:12:50.390 に答える
2

T-SQL ステートメントは、提案された方法で条件付きで構築することはできません。

次の行に沿って、クエリを varchar に構築し、構築された文字列に対して EXEC を実行する必要があります。

Declare @QueryString varchar(100)
Declare @Direction int

Select @direction = sorting
  from table2
 where table2.id=? //from your original, not clear how you are providing it

Set @QueryString = 'Select * from table order by yourField ' + case when @direction=1 then 'ASC' else 'DESC' end

Exec (@QueryString)

編集order_by フィールドが数値であると仮定すると、使用するトリックの 1 つ (ただし、「ベスト プラクティス」キャンプに分類されるかどうかはわかりません) は、order by フィールドの値に -1 を掛けて、デフォルトの順序を逆にすることです。例えば

Select @Direction = sorting
  from table2
 where table2.id=? 

Select * 
  from table
  order by (case when @direction=1 then -1 else 1 end) *yourField
于 2012-10-25T18:11:19.597 に答える