Php 快速生成随机MySQL行,并多次运行相同的sql查询

Php 快速生成随机MySQL行,并多次运行相同的sql查询,php,mysql,sql,random,Php,Mysql,Sql,Random,我发现了一个例子,它可以快速生成一个随机行: 现在我想运行该查询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_o

我发现了一个例子,它可以快速生成一个随机行:

现在我想运行该查询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 } ?>

如果您想要十行,则以下各项的性能有多差:

select u.*
from users u
order by rand()
limit 10;
这正是你想要的。而且,在一个查询中获取所有行可以在运行多个查询时节省大量开销。因此,尽管按兰德公司订购,它可能比您的方法更快。但是,这取决于用户数量

您也可以这样做:

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行。

如果您想要10行,以下各项的性能有多差:

select u.*
from users u
order by rand()
limit 10;
这正是你想要的。而且,在一个查询中获取所有行可以在运行多个查询时节省大量开销。因此,尽管按兰德公司订购,它可能比您的方法更快。但是,这取决于用户数量

您也可以这样做:

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个。

您的第一次查询耗时:0.2934秒。第二次查询耗时:0.0532秒。。如果我只对我编写的查询进行了更正,但我需要运行10次,时间为1次:0.0009秒。问题是我需要在任何时候运行这个系统,我真的不想让数据库过载。@Mensur。但第一个查询是单个查询,基本上不会随着返回数量的增加而花费更长的时间。我关心的是,当生成sitemap.xml时,我在页面上显示了表10K+中的所有用户,然后您可以单击该用户并查看有关该用户的更多信息,但当在该页面上查看用户页面时,也会再次随机生成10个其他用户。所以我的问题是,生成sitemap.xml文件会不会让网站过载?@Mensur。一旦在页面上显示数据,就不应该再次随机生成相同的数据。也许我误解了你的评论。你的第一个问题花了:0.2934秒。第二次查询耗时:0.0532秒。。如果我只对我编写的查询进行了更正,但我需要运行10次,时间为1次:0.0009秒。问题是我需要在任何时候运行这个系统,我真的不想让数据库过载。@Mensur。但第一个查询是单个查询,基本上不会随着返回数量的增加而花费更长的时间。我关心的是,当生成sitemap.xml时,我在页面上显示了表10K+中的所有用户,然后您可以单击该用户并查看有关该用户的更多信息,但当在该页面上查看用户页面时,也会再次随机生成10个其他用户。所以我的问题是,生成sitemap.xml文件会不会让网站过载?@Mensur。一旦在页面上显示数据,就不应该再次随机生成相同的数据。也许我误解了这个评论。