我有一个SQL查询给出大约100+的结果,我想要洗牌前20个结果(其他80+应该保持在SQL查询选择它们的顺序)。现在最好的方法(我不想增加SQL负载,所以没有ORDER BY等)是将结果放入一个数组,切片数组,将切片的20个结果洗牌,把它们放回去显示它们。但是,我不确定如何用准备好的声明来做到这一点。有什么指针吗?
$array = $stmt -> fetch();
没有得到我希望的结果。这并没有创建一个包含结果的数组。您可以在下面找到代码的相关部分:
$stmt->prepare($query);
$stmt->bind_param('ssii', $dienstenpage, $huidigegemeente, $startpoint, $limit);
$stmt->execute();
$stmt->bind_result($prepid, $prephoofdrubriek, $prepplaats, $prepbedrijfsnaam, $prepgemeente, $prepbedrijfsomschrijving, $prepbedrijfsslogan, $prepstraatnaam, $prephuisnummer, $preppostcode, $preptelefoonnummer, $prepfax, $prepemail, $prepwebsite, $prepbedrijfslogo, $prepdubb);
$stmt->store_result();
$numrows = $stmt->num_rows;
while($stmt->fetch()) {
this displays all the results...
}
答案 0 :(得分:5)
使用fetchAll
获取包含所有行的数组。然后,执行以下操作:
$first20 = array_splice($allResults,0,20);
shuffle($first20);
array_splice($allResults,0,0,$first20);
这个答案大量使用array_splice()
,这是一个非常有用的功能!