假设我有一个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个随机非重复名称的最佳代码是什么?
答案 0 :(得分:1)
最简单的方法(也是数据库中最快的方法)是使用range和shuffle函数生成十个唯一数字,然后使用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