Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从查询中获取10行_Php_Mysql_Arrays - Fatal编程技术网

Php 从查询中获取10行

Php 从查询中获取10行,php,mysql,arrays,Php,Mysql,Arrays,我有一个由连接组成的查询,输出了大约30000多条记录。我想从这些记录中随机获得10行,而不使用SQL命令ORDER BY rand 我试着循环记录,把它们放在一个数组中,在洗牌后得到前10个,但是产生这些记录需要8-12秒。我想不惜一切代价缩短处理时间 我将如何做到这一点 如果不想使用RAND,请先快速选择id列,然后只选择所需的10行 将ID选择到$idarray中 从表中选择id 洗牌并切块$idarray 洗牌$idarray; $ids=数组\u片$idarray,0,10; 选择完整

我有一个由连接组成的查询,输出了大约30000多条记录。我想从这些记录中随机获得10行,而不使用SQL命令ORDER BY rand

我试着循环记录,把它们放在一个数组中,在洗牌后得到前10个,但是产生这些记录需要8-12秒。我想不惜一切代价缩短处理时间


我将如何做到这一点

如果不想使用RAND,请先快速选择id列,然后只选择所需的10行

将ID选择到$idarray中 从表中选择id 洗牌并切块$idarray 洗牌$idarray; $ids=数组\u片$idarray,0,10; 选择完整的行 $sql=选择。。。其中id位于。内爆“,”,$idarray。;
编辑:这肯定比使用ORDER BY RAND快得多

如果不想使用RAND,请先快速选择id列,然后只选择所需的10行

将ID选择到$idarray中 从表中选择id 洗牌并切块$idarray 洗牌$idarray; $ids=数组\u片$idarray,0,10; 选择完整的行 $sql=选择。。。其中id位于。内爆“,”,$idarray。;

编辑:这肯定比使用ORDER BY RAND快得多

您当前的查询是什么?为什么不使用rand?我不确定不使用rand就可以只从查询中获取随机行。您使用的是MySQL吗?所以-让我们来弄清楚-您需要一个随机行,而不需要使用生成随机数的函数。您可以将问题从SQL或转移到PHP或。。。无论如何,你也会遇到同样的困难。我做了一些搜索,找到了一些非常有趣的答案。但是还没有尝试过。那么您当前的查询是什么?为什么不使用rand?我不确定是否可以仅从查询中获取随机行而不使用rand。您使用的是MySQL吗?所以-让我们来弄清楚-您需要一个随机行,而不需要使用生成随机数的函数。您可以将问题从SQL或转移到PHP或。。。无论如何,你也会遇到同样的困难。我做了一些搜索,找到了一些非常有趣的答案。还没有尝试过。从数据库中获取30000多个ID并不断增长,洗牌,然后扔掉29990+肯定比让RDBMS做随机化要慢得多…我刚刚测试过从数据库中选择那么多id,按兰德顺序限制10个id列所需的时间比没有按兰德顺序限制和限制要长30多倍。。。。使用ORDER BY和LIMIT选择30列需要花费1000多倍的时间。PHP需要0.003秒来洗牌和分割30000个ID。感谢您的回复。我尝试了你的方法,节省了3-4秒的生成时间。这听起来可能很傻,但有没有一种方法可以在MYSQL结果中只选择一些行,而不逐个循环记录,当然也不使用ORDER by rand?我不知道。你有RAND和LIMIT,不像PHP,通常只有一种方法可以做一些事情。从数据库中获取30000多个ID并不断增长,洗牌,然后扔掉29990+肯定比让RDBMS做随机化要慢得多…我刚刚测试过从数据库中选择那么多id,按兰德顺序限制10个id列所需的时间比没有按兰德顺序限制和限制要长30多倍。。。。使用ORDER BY和LIMIT选择30列需要花费1000多倍的时间。PHP需要0.003秒来洗牌和分割30000个ID。感谢您的回复。我尝试了你的方法,节省了3-4秒的生成时间。这听起来可能很傻,但有没有一种方法可以在MYSQL结果中只选择一些行,而不逐个循环记录,当然也不使用ORDER by rand?我不知道。您有RAND和LIMIT,与PHP不同的是,通常只有一种方法可以完成某些事情。