我有一个数据库表,其中包含约1.6亿行。
该表有两列: id和listing。
id
listing
我只需要使用PHP从listing列中显示1000个随机行并将它们放入<span>标记中。像这样:
<span>
<span>Row 1</span> <span>Row 2</span> <span>Row 3</span>
我一直在尝试这样做,ORDER BY RAND()但是要花这么长时间才能在如此大的数据库上加载,而且我找不到其他解决方案。
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循环)。
让我知道您是否需要其他帮助。