4

現在、私がやろうとしているのは、200 個のセットから 30 個の数字のチャンクを取得することです。たとえば、これは MySQL で使用されるため、200 個の画像のデータベースから 30 個のランダムな画像を選択したいと考えています。次のような 30 行のデータを返す limit ステートメントで使用できる 2 つの数値 (上限と下限) を使用できるようにしたいと考えていSELECT * FROM 'images' LIMIT 20,50ますSELECT * FROM 'images' LIMIT 10,40。これはおそらくばかげた質問のように聞こえるかもしれませんが、私の脳は今ちょっと困惑しています. すべてのヘルプは大歓迎です! ありがとう :)

4

3 に答える 3

3

ORDER BY RAND()クエリに追加するだけです。それは「十分に」ランダムです。

 SELECT FOO FROM BAR ORDER BY RAND() LIMIT 30
于 2012-08-16T02:42:01.703 に答える
2

データベースに全テーブル スキャンとコストのかかる並べ替え操作を強制的に実行させるため、使用ORDER BY RAND()はアンチパターンと見なされます。

クエリ キャッシュを活用するには、次のようなハイブリッド ソリューションを作成できます。

// take all image ids
$keys = $db->query('SELECT image_id FROM images')->fetchALL(PDO::FETCH_COLUMN, 0);

// pick 30
$random_keys = join(',', array_rand(array_flip($keys), 30));

// query those images only
$values = $db->query("SELECT * FROM images WHERE image_id IN ($random_keys)")->fetchAll(PDO::FETCH_ASSOC);

上記のキーのクエリは PHP でキャッシュできるため、より頻繁なリクエストに使用できます。ただし、テーブルが 100k 以上の範囲になる場合は、画像テーブルに対して結合できるランダムな順序で画像 ID を使用して別のテーブルを作成することをお勧めします。ORDER BY RAND(). _

于 2012-08-16T02:53:52.857 に答える
1

PHP のarray_rand().

http://php.net/manual/en/function.array-rand.php

選択したいものを配列に入れて、20 個のエントリを選択させます。次に、ファイル名が番号順であることに依存することなく、必要なファイル名を使用できます。

于 2012-08-16T02:41:31.890 に答える