2011-01-18 7 views
1

だから私は私のクライアントは、これに永久的なイメージのセットを追加したいランダムなレコードと特定のレコードを1つのクエリで取得しますか?

SELECT foo FROM `imageTable` ORDER BY RAND() LIMIT 0, 12; 

ようなクエリによって移入カバーフロー風の画像カルーセルを持っています。結果が使用される方法のため、これらのレコードを元のクエリの一部にすることができれば非常に便利です。私はIDを持つレコードが必ずしも結果セットではなくRAND(いやだろう期待していた

SELECT foo FROM `imageTable` WHERE `id` = 'x' OR `id` = 'y' 
    OR `id` IS NOT NULL ORDER BY RAND() LIMIT 0, 12; 

を試してみました

)がセット全体をシャッフル。

私の質問は、単一のクエリがx永久レコードとyランダムレコードを提供できるかどうかです。あなたは、SQLで組合のコマンドを試すことができます

(SELECT * FROM `imageTable` ORDER BY RAND() LIMIT 0, 6) 
UNION 
(SELECT * FROM `imageTable` WHERE `id` = 'foo' OR `id` = 'bar' OR `id` = 'baz') 

答えて

4

:エイドリアン・セラフィンの答えを使用した改訂版QUERY WITH

// EDIT。

select random 
    union 
select choosed 
+1

ありがとうございました!それは素晴らしい作品です!私に新しいものを教えてくれてありがとう! – jerrygarciuh

1

あなたが組合を試みる場合があります...

 
(SELECT foo FROM imageTable WHERE id not in ('x','y') ORDER BY RAND() LIMIT 0, 12;) 
UNION 
(SELECT foo FROM imageTable WHERE id in ('x','y') 
ORDER BY a LIMIT 10; 

+0

ありがとうジョン!私は( 'x'、 'y')でそれを使うことについて知らなかったので、私は新しいトリックを手に入れることを学んだ。ありがとう! – jerrygarciuh

1

連合一緒に、しかし、あなたはまた、INの代わりに、複数のORステートメントを使用することができます 回以上を示すから、XとYを防ぎますより簡潔にする。

SELECT foo FROM (
    SELECT foo FROM `imageTable` 
    WHERE id NOT IN ('x','y','z') 
    ORDER BY RAND() LIMIT 0, 9 # reduce by 3 
) A 
UNION ALL 
SELECT foo FROM (
    SELECT foo FROM `imageTable` 
    WHERE id IN ('x','y','z') 
) B 
ORDER BY RAND() # order again so that x,y,z are anywhere in the set 
+0

ありがとう! NOT INを追加することは素晴らしい提案です! – jerrygarciuh

+0

私はUNION ALLの代わりにUNION' *を使うだけで、結果から重複を排除するという印象を受けました。今、それが本当であれば、LIMIT 10がランダムなクエリに適用される前または後に問題が発生する可能性があるかどうかはわかりません... –

関連する問題