2016-10-09 63 views
1

我发现它产生迅速排随机的例子: MySQL select 10 random rows from 600K rows fast快速生成随机的MySQL行并运行相同的SQL查询多次

现在我想运行一个查询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

如果你想十行,是多么糟糕的表现:

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

+0

您的第一个查询花费了:0.2934秒。 第二个查询花了:0.0532秒.. 如果我只是正确的查询我写的,但我需要运行10次需要1次:0.0009秒。 事情是我需要运行这个maaaaaaaany时间,我真的不'想超载我的数据库。 – Mensur

+0

@Mensur。 。 。但第一个查询是单个查询,基本上不会花费更长的时间,因为您增加了返回的数字。 –

+0

我担心的是,当我在我的页面上生成sitemap.xml时,会显示来自表10K +的所有用户,然后您可以单击该用户并查看有关该用户的更多信息,但也可以在该页面上查看用户页面时查看10其他用户将被再次随机生成。所以我的问题是,生成sitemap.xml文件会使网站超载? – Mensur