1

假设我有一个 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 个随机非重复名称的最佳代码是什么?

4

5 回答 5

1

根据表中的行数,出于性能原因,您可能不想ORDER BY RAND()按照其他 4 人的建议进行操作:

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

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

如果它们是连续的,您可以在该范围内生成一个随机数,或者检索所有 ID,将它们打乱并请求前 10 个值。

针对这个问题还有其他一些建议。

于 2013-05-18T23:22:05.003 回答
1

最简单的方法(也是数据库最快的方法)是使用范围随机播放函数生成十个唯一数字,然后使用 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)
于 2013-05-17T22:23:31.017 回答
0
$sql = "SELECT DISTINCT id, name FROM names ORDER BY RAND() LIMIT 10"; 
于 2013-05-17T22:05:35.423 回答
0

你会想要使用ORDER BY RAND()

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

while ($row = mysql_fetch_array ($result)){
于 2013-05-17T22:05:54.217 回答
0

尝试这个 :

 SELECT DISTINCT * FROM names ORDER BY RAND() LIMIT 10
于 2013-05-17T22:20:11.960 回答