2011-07-26 4 views
1

誰かがこの問題で私を助けることを願っています。最大2つの変数のmysqlテーブルを注文

私は2つの列を持つテーブルを持っていますが、私はそのテーブルから項目を選択し、これらの2つの値のどちらが高いかに応じて並べ替える必要があります。

私は列 'X' と 'Y' を持っていると私はこれらのエントリを持って言うことができます:私はこの習慣を知っている3、1、2

:私は応答が注文することにしたい

 x ; y 
1.- 10 ; 12 
2.- 5 ; 10 
3.- 11 ; 20 

それは、MySQLにはローミングサービスを持っていませんが、私のアイデア私はこのクエリのテーブルに新しい変数を作成したくない

$query = (mysql_query("SELECT * FROM productos ORDER BY MAX(x, y)")); 

の表現であることから、助けます。

ありがとうございます

+3

あなたのサンプルデータは、あなたの期待されるソート順 – rabudde

+0

IF(expr1と、expr2に、expr3は)制御フロー機能を使用してみてくださいと一致していません。 – Devart

+0

私は質問を理解して、あなたの例は、返信する必要があります –

答えて

4

あなたはxまたはyの後にソートしたいですか?

SELECT * FROM products ORDER BY GREATEST(x, y) 

しかし、あなたの場合、これは3であり、2、1(Y)15なぜならだから、少し混乱していますより-5(X)が高く、また、行1の最大よりも高くなります。


サポートのNULL、正しい順序:あなたは0以外デフォルトとして他の値が必要な場合は

SELECT * FROM products ORDER BY GREATEST(COALESCE(x, 0), COALESCE(y, 0)) DESC 

それを交換してください。

+0

あなたのタイプミスを修正したので、結果は3,1,2になります。 – ZoolWay

+1

@Zollway: 'ORDER BY GREATEST(x、y)DESC' –

+0

このメソッドは、私が列のsoemにnullを持っているときには動作しません...それは予測不可能な種類の動作します。とにかく病気はnull値を0に変更するだけです。ありがとうございます –

2
Select 
    * 
from 
    products 
order by 
    Case when x>y then x else y end DESC 
+0

華麗...ありがとう、その非常に明白な今あなたはそれを言及 –

+0

私はSQLServer dev 'Greatest()'はありませんが、case文も同様に動作します – CResults

2
SELECT * 
FROM products 
ORDER BY GREATEST(x,y) DESC 
     , LEAST(x,y) DESC 

順序(最小)の第2の部分は(10,20)と行の前(12,20)と行を置くことです。 2つのフィールドがNULLを持つことができます


ので:

SELECT * 
FROM products 
ORDER BY GREATEST(COALESCE(x,0), COALESCE(y,0)) DESC 
     , LEAST( COALESCE(x,0), COALESCE(y,0)) DESC ; 
関連する問題