尽可能容易地随机化mysql输出

时间:2011-04-11 20:02:45

标签: php mysql

我有mysql语句:

$mysql=mysql_query("SELECT id,name FROM table1 ORDER BY id LIMIT 10");

从此我正在做

while($row = mysql_fetch_array($mysql)){
    echo $row['name'].'<br>';
}

现在我正在尝试将我从mysql中获取的行重新调整而不使用ORDER BY RAND(),因为这会导致速度减慢。

正确的语法是什么来编程,所以行出来洗牌?

4 个答案:

答案 0 :(得分:3)

使用shuffle

$results = array();
while($row = mysql_fetch_array($mysql)){
    $results[] = $row['name'];
}

shuffle($results);

答案 1 :(得分:1)

如果你不一定需要它们

  

“出来洗牌”

...就像在“数据库之外”一样,然后你可以在检索完所有记录后立即进行随机播放。

由于您可以fetch all rows作为关联数组,因此您只需shuffle结果。这将为您提供返回行的随机顺序。

在你的情况下:

$mysql = mysql_query("SELECT id,name FROM table1 ORDER BY id LIMIT 10");

$results = array(); //this might be unnecessary

while($row = mysql_fetch_array($mysql))
{
    array_push($results, $row);
}

shuffle($results);
foreach( $results as $row )
{
    echo $row['name'] . "<br />";
}

答案 2 :(得分:0)

将结果放入php数组中,然后随机将它们从数组中取出。

这应该可行,但我还没有测试过:

while($row = mysql_fetch_array($mysql)){
    $array[] = $row['name'];
}

$c = count($array);
for($i = 0; $i < $c; $i++){
    $r = rand(0, $c - ($i + 1));
    echo $array[$r];
    unset($array[$r]);
}

答案 3 :(得分:0)

在PHP或任何PHP端排序方法中使用shuffle(),只会在每次执行时随机化MySQL表中的10行(LIMIT 10)。

虽然效率更高,但结果与ORDER BY RAND()的结果完全不同。

很难知道OP要求的两种行为中的哪一种,但如果它是第二种行为(因为他已尝试ORDER BY RAND()),我建议使用更有效的方法随机检索10行< em>来自整个MySQL表(不是其行的子集):请参阅 Quassnoi's solution (和问题Faster to randomize many results on MySQL Server or in PHP)。