0

重複の可能性:
SQLでランダムな行を要求する方法は?

テーブルが大きいため、MySQL関数を使用できず、この方法RAND()の使用を避けようとしています。RAND()

$a = mysql_fetch_array(mysql_query("SELECT MIN(id), MAX(id) FROM table WHERE category_id='".$var."'"));
$id = rand($a[0],$a[1]);
$id2 = rand($a[0],$a[1]);

これは機能しません。理由は次のとおりです。$a私はそれぞれのIDで最大と最小を持っていますcategory_id-それは問題ありません。

$idこの問題は、最小ID値と最大ID値が使用されているため、行にとをもたらし$id2ますが、PHP関数rand()は最小値と最大値の間でランダムな値を取ります。また、選択されたレコードがに属さない可能性が高くなりcategory_idます。

それで、私はあなたに方法について尋ねたいと思います、どうすればこの例を修正できますか?

ありがとうございました

4

1 に答える 1

3

これを試すことができます:

$row = mysql_fetch_assoc(
    mysql_query(
      "SELECT count(*) as count FROM table WHERE category_id='$var'"));

$randomrow = rand(0, $row['count'] -1);

$q = mysql_query("
  SELECT * FROM table 
  WHERE category_id='$var'
  LIMIT 1 OFFSET $randomrow");
于 2012-09-21T18:07:53.643 に答える