我有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(),因为这会导致速度减慢。
正确的语法是什么来编程,所以行出来洗牌?
答案 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)。