我想从数千行中随机获取15行

时间:2018-10-25 03:37:17

标签: php mysql mysqli

此代码不起作用:

$q=mysqli_query($con,"SELECT * FROM questions WHERE eid='$eid' AND sn='$sn' ORDER BY RAND() LIMIT 15" ); 
echo '<div class="panel" style="margin:5%">'; 
while($row=mysqli_fetch_array($q) ) { 
     $qns=$row['qns']; $qid=$row['qid']; 
     echo '<b>Question &nbsp;'.$sn.'&nbsp;::<br />'.$qns.'</b><br /><br />'; 
}

1 个答案:

答案 0 :(得分:1)

这是一个演示,ORDER BY RAND() LIMIT n的工作方式如锡纸上所述:https://rextester.com/CDLQ61841

drop table if exists t;
create table t (id int, val varchar(255));

insert into t (id, val)
values (1, 'foo'), (2, 'bar'), (3, 'baz'), (4, 'quux'), (5, 'bing');

select * from t;

select * from t
where id > 0
order by rand();

select * from t
where id > 1
order by rand()
limit 2;

drop table t;

您可以一遍又一遍地运行该命令,看看返回的行是如何随机的,并且在查询中包含limit 2的情况下,每次只会返回两行。

如果从查询中返回的行超过15条,那么我会做出一个疯狂的猜测,并说您可能使用相同的数据库连接执行了先前的查询,而您并未完成所有查询的获取行,并且您的循环正在获取这些行的其余部分,然后才开始从当前查询中获取行。我的猜测是您永远不会在代码中的任何地方调用mysqli_free_result() ...