0

何百万もの結果を期待しているSELECTクエリがあります。これらの結果をMySQLでランダム化する必要があります。クエリの後にスクリプトでそれを行うと、明らかにRAMが多すぎます。rand()による順序を使用せずに結果がすべてランダムになるように、誰かがこのクエリを作り直してください。いくつかの例を見て使用しようとしましたが、WHERE句を使用するのではなく、テーブル全体を返すことに依存しているように見えるため、それらはすべて機能しません。これが私の質問です:

SELECT * FROM pool
WHERE gender = 'f'
AND (`location` = 'united states' OR `location` = 'us' OR `location` = 'usa');
4

2 に答える 2

0

ID を持つ 1000 万行がある場合、それらは連続した範囲内にありますか?

  1. クイック選択を使用して、必要な範囲から最小の ID を取得します。
  2. 最大の ID も取得します。
  3. PHPを使用して、この範囲で乱数を生成します
  4. 数値を取得したら、「SELECT * FROM table1 WHERE id IN (生成した数値)」またはそのようなもの
于 2012-06-13T22:23:21.503 に答える
0

php などの他の言語を使用できる場合は、そのrand()関数を使用して ID を生成し、次のようにクエリに追加できます。

$ids = range($mini, $maxid);
shuffle($ids);
array_slice($ids, 0, $quantity);

または、使用している言語で同様のもの。

純粋な mysql クエリでこれを行う必要がある場合は、いくつかの代替手段があります: http://www.electrictoolbox.com/msyql-alternative-order-by-rand/

于 2012-06-13T22:11:02.747 に答える