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

时间:2016-10-09 02:24:04

标签: php mysql sql random

我找到了一个快速生成随机行的示例: 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 } ?>

1 个答案:

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