Shuffle前20个准备好的声明结果

时间:2014-05-13 22:02:01

标签: php mysql sql

我有一个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...

}

1 个答案:

答案 0 :(得分:5)

使用fetchAll获取包含所有行的数组。然后,执行以下操作:

$first20 = array_splice($allResults,0,20);
shuffle($first20);
array_splice($allResults,0,0,$first20);

这个答案大量使用array_splice(),这是一个非常有用的功能!