Php MySQL非重复随机数据显示

时间:2013-05-17 22:02:36

标签: php mysql random

假设我有一个mySQL数据库:两列:ID和名称,有100行。 我想做的是挑出10个名字 - 没有重复 - 并以随机顺序显示它们。

使用此代码,我只能选出一个名字......

<?php
include('connection.php');

$rand = rand(1, 100);
$sql = "SELECT * FROM names WHERE ID=$rand";
$result = mysql_query($sql, $sandbox);

while ($row = mysql_fetch_array ($result)) 
{
$name1 = $row['Name'];
echo $name1 . "<br>";
}

?>

...获取我的10个随机非重复名称的最佳代码是什么?

5 个答案:

答案 0 :(得分:1)

最简单的方法(也是数据库中最快的方法)是使用rangeshuffle函数生成十个唯一数字,然后使用IN子句创建一个查询:

$numbers = range(1, 100);
shuffle($numbers);
$numbers = implode( ', ', array_slice($numbers, -10) );

$sql = "SELECT * FROM names WHERE ID IN ($numbers)";
// example query: 
// SELECT * FROM names WHERE ID IN (63, 76, 69, 59, 9, 84, 60, 18, 23, 62)

答案 1 :(得分:1)

根据表中的行数,您可能不希望按{4}}的其他4位用户的建议执行ORDER BY RAND()

  

ORDER BY RAND()操作实际上会重新查询表的每一行,分配一个随机数ID,然后传递结果。对于超过500行的表,这需要大量的处理时间。

推荐的方法扩展了您最初的想法,以获得10个ID并为这些ID执行简单的选择查询。

如果它们是连续的,您只需在该范围内生成随机数,或检索所有ID,将它们随机播放并请求前10个值。

还有其他一些建议可以回应performance reasons

答案 2 :(得分:0)

$sql = "SELECT DISTINCT id, name FROM names ORDER BY RAND() LIMIT 10"; 

答案 3 :(得分:0)

您需要使用ORDER BY RAND()

$sql = "SELECT * FROM names ORDER BY RAND() LIMIT 10";
$result = mysql_query($sql, $sandbox);

while ($row = mysql_fetch_array ($result)){

答案 4 :(得分:0)

试试这个:

 SELECT DISTINCT * FROM names ORDER BY RAND() LIMIT 10