2016-10-09 60 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