我找到了一个快速生成随机行的示例: MySQL select 10 random rows from 600K rows fast
现在我想运行该查询10次,但我得到完全相同的输出而不是不同的行。任何想法如何解决这个问题:
这是我的代码:
<?php
for ($e = 0; $e <= 14; $e++) {
$sql_users = "SELECT user_name, user_age, country, age_from, age_to, gender, profile_image, gender_search, kind_of_relationship
FROM users AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM users)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1";
$statement6 = $dbConn->prepare($sql_users);
$statement6->execute();
more = $statement6->fetch(PDO::FETCH_BOTH);
?>
<?php echo $more['user_name'];?>
<?php } ?>
答案 0 :(得分:0)
如果你想要十行,那么表现有多糟糕:
select u.*
from users u
order by rand()
limit 10;
这确实完全符合您的要求。并且,在单个查询中获取所有行可以节省运行多个查询的大量开销。所以,尽管order by rand()
,它可能比你的方法更快。但是,这取决于用户数量。
您也可以这样做:
select u.*
from users u cross join
(select count(*) as cnt from users u) x
where rand() < (10*5 / cnt)
order by rand()
limit 10;
where
子句随机选择约50行 - 给予或接受。但是信心很高,至少会有10个。这个数字排序很快,你可以随机选择其中的10个。