我有一个数据库表,其中包含约1.6亿行。
该表有两列:id
和listing
。
我只需要使用PHP从listing
列中显示1000个随机行并将它们放入<span>
标记中。像这样:
<span>Row 1</span>
<span>Row 2</span>
<span>Row 3</span>
我一直在尝试这样做,ORDER BY RAND()
但是要花这么长时间才能在如此大的数据库上加载,而且我找不到其他解决方案。
我希望有一个快速/轻松的方法来做到这一点。我无法想象仅仅回显1000个随机行是不可能的……谢谢!
ORDER BY RAND()是一个可以在小型数据库上正常运行的mysql函数,但是如果您运行的行大于10k,则应在程序内部构建函数,而不要使用mysql预制函数或以特殊方式组织数据。
我的建议:通过自动增量使mysql数据保持索引id
,或添加其他增量和唯一行。
然后构建一个选择函数:
<?php
//get total number of rows
$result = mysql_query('SELECT `id` FROM `table_name`', $link);
$num_rows = mysql_num_rows($result);
$randomlySelected = [];
for( $a = 0; $a < 1000; $a ++ ){
$randomlySelected[$a] = rand(1,$num_rows);
}
//then select data by random ids
$where = "";
$control = 0;
foreach($randomlySelected as $key => $selectedID){
if($control == 0){
$where .= "`id` = '". $selectedID ."' ";
} else {
$where .= "OR `id` = '". $selectedID ."'";
}
$control ++;
}
$final_query = "SELECT * FROM `table_name` WHERE ". $where .";";
$final_results = mysql_query($final_query);
?>
如果缺少该1.6亿个数据库中的某些增量ID,那么如果随机选择的ID数组所包含的数量少于所需数量,则可以轻松添加一个函数来添加另一个随机ID(可能是while循环)。
让我知道您是否需要其他帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句