此代码不起作用:
$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 '.$sn.' ::<br />'.$qns.'</b><br /><br />';
}
答案 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()
...