2012-02-23 17 views
0

以内に、私は、この列の値は他の人のためにしながら、positive integerでそれを設定し、列「FooIdのMySql:オーダーが異なり、同じ列

Foo attributeセットを持っていることを選択するユーザーとテーブルFooを持っています-1

FooIdの結果がデフォルト値(つまり-1)よりも前になるように、FooId列の順序でテーブルの内容を並べ替えることにしました。 だから、私はselect * from Foo order by FooId descのようなクエリを持っています。

は今、私はpositive 'FooId'との結果がFooId = -1と結果の前に残っているが、結果はランダムを命じているように私の結果をランダム化します。 rand()の何かは、現時点でパフォーマンスに焦点を当てていないので、大丈夫です。

クエリを作成するためのオプションは何ですか?

答えて

2
SELECT * FROM Foo 
ORDER BY IF(FooId>0,RAND(),-0.1) DESC; 
0

あなたはSELECT ... WHERE FooID >=0 ORDER BY RAND()を行うことができ、その後、別のはそうのように選択してUNIONを使用します。

SELECT * 
FROM Foo 
WHERE FooID >= 0 
ORDER BY RAND() 
UNION ALL 
SELECT * 
FROM Foo 
WHERE FooID == -1; 

あなたがいる限り、彼らは同じ列を持っているようUNION ALLを持つ任意のテーブルを連結することができます。

0

この文字列で検索してください -

SELECT * FROM Foo ORDER BY if(FooId >= 0, 0, 1), RAND(); 
0

以下は試してみてください。

SELECT * FROM Foo 
ORDER BY IF(FooId > 0,0,1); 
+0

私はそれがランダムになるとは思いません。それは? –

関連する問題