2011-03-28 9 views
1

私の場合、私はランダムに選択する必要がある以外の最初の特定の項目を表示する必要があります。私は次のクエリmysql Rand()が動作しない

"SELECT * FROM table_test1 WHERE id = 3 UNION(SELECT * FROM table_test1 WHERE id <> 3 ORDER BY RAND()) " 

を使用しかし、それは選択しないランダム

私のテーブル

id name 
1 A 
2 B 
3 C 
4 D 
5 E 

これは、いずれかが組合の理論を説明することができ、常にC-A-B-D-E

を選択?

いただきましたここで間違っ

答えて

1

使用

SELECT * 
FROM table_test1 
ORDER BY CASE 
      WHEN id = 3 THEN -1 
      ELSE RAND() 
      END 

Quassnoiは、第二文のコメントORDER BYで指摘するように、完全に無視されます。

意味的には、結果全体を特定の順序でソートする場合は、クエリ全体に適用されるが必要です。または、ソリューションが将来のバージョンで破損する実装についての仮定に依存する可能性があります。

+0

martin私はしようとしましたが動作しません..同じ結果C-A-B-D-E – Gowri

+0

@gowri - 恥、私はそれになると確信していました!私の2番目の提案はどうですか? –

+0

ワウこの作品は、ウインドウの理論を説明することができます – Gowri

0

UNIONは重複を削除します。これを行うために、結果セット、つまり取得する順序をソートします。 UNION ALLを使用すると、重複を削除しないので、ソートする必要はありません。

また、http://jan.kneschke.de/projects/mysql/order-by-rand/ ORDER BY RAND()を使用しないでください。それは縮尺通りではありません。

関連する問題