2016-10-09 3 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 sec. Второй запрос занял: 0.0532 сек. Если я прав только на запрос, который я написал, но который мне нужно запустить 10 раз, он занимает 1 раз: 0,0009 сек. Дело в том, что мне нужно запустить это maaaaaaaany раз, и я действительно не хочу перегружать свою БД. – Mensur

+0

@ Mensur. , , Но первый запрос - это один запрос и в основном не будет занимать больше времени, поскольку вы увеличиваете возвращаемое число. –

+0

Моя забота о том, когда генерация sitemap.xml, где у меня на моей странице отображаются все мои пользователи из таблицы 10K +, тогда вы можете нажать на этого пользователя и посмотреть больше информации о пользователе, но также и при просмотре страницы пользователя на этой странице 10 другие пользователи будут случайным образом сгенерированы снова. Итак, мой вопрос заключается в создании файла sitemap.xml, чтобы он перегружал сайт? – Mensur

Смежные вопросы