PHP,MySQL:如何选择没有RAND的随机记录(尝试避免RAND())

PHP,MySQL:如何选择没有RAND的随机记录(尝试避免RAND()),php,mysql,sql,random,Php,Mysql,Sql,Random,可能重复: 由于一个巨大的表,我无法使用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以及相应的类别ID-没关系 该问题带

可能重复:

由于一个巨大的表,我无法使用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以及相应的
类别ID
-没关系

该问题带来了带有
$id
$id2
的行,因为使用了最小和最大id值,但是PHP函数
rand()
将在最小值和最大值之间取一些随机值,并且很有可能挑选出的记录不属于
类别\u id

所以我想问你一个方法,我如何修复这个例子

谢谢你

你可以试试这个:

$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");
你可以试试这个:

$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");

-如果您按每行必须计算的内容订购,您将需要花费时间进行计算并使用内存进行存储。谢谢,我不知道这一点。调整了我的答案:)-如果您按每行必须计算的内容订购,您将需要花费时间来计算它和内存来存储它。谢谢,我不知道这一点。调整了我的答案:)但那个问题的答案是使用
ORDER BY RAND()
,他说这对他来说不是一个可行的解决方案。@Barmar,把接受的答案读到最后
ORDER BY RAND()
只是说有一种更好的方法,它适用于任何已知大小的表。但这个问题的答案是使用
ORDER BY RAND()
,他说这对他来说不是一个可行的解决方案。@Barmar,把公认的答案读到最后<提到code>orderbyrand()只是为了说明有一种更好的方法,它适用于任何已知大小的表。