Используя метод, который вы дали это ресурсоемким, не очень случайных и медленно и неэффективно. MySQL
RAND()
и особенно ORDER BY RAND()
особенно неэффективен.
Чтобы ORDER BY
случайного значения по всей таблицы должны быть вызваны, а затем перемешиваются, как перетасовка всех карт в колоде, чтобы выбрать первую карту из верхней части, что оставляет 51 карт, которые называются , загружен и перетасован без вывода.
Существуют различные дискуссии по теме, калечить основной SQL-код, чтобы получить немного лучший результат, такие как: https://stackoverflow.com/a/17757787/3536236
Подробнее можно прочитать здесь: http://theoryapp.com/select-random-records-in-mysql/
Итак, что можно сделать?
Ну, если у вас есть столбец идентификатора (конечно, указана) для таблицы location
, что вам действительно нужно, то это значительно облегчит жизнь.
Если у вас есть НЕТ НЕДОСТАТКИ в столбце Id, то вы не можете просто найти максимальное значение и выбрать случайное число от 1 до максимума,
Так
$maxSql = mysqli_query($connection, "SELECT id FROM location ORDER BY id DESC LIMIT 1");
$max = mysqli_fetch_array($maxSql);
$max = $max['id'];
Это заказывает столик по индексированному столбцу числового идентификатора и занимает верхнее значение, которое будет самым высоким, а затем подключить его к рандомизатору PHP, чтобы дать вам:
$id = mt_rand(1,$max);
Тогда
$sSQLQuery = mysqli_query($connection, "SELECT city FROM location
WHERE ID = '$ ID' LIMIT 1; "); $ city = mysqli_fetch_array ($ sSQLQuery);
Если вы сделать есть пробелы, то было бы проще запустить первую часть в цикле, чтобы проверить, что значение существует, и если она существует, то вернуть эту строку, например:
unset($found);
while(!$found){
$sSQLQuery = mysqli_query($connection, "SELECT city FROM location WHERE id = '$id' LIMIT 1;");
if (mysqli_num_rows($sSQLQuery)){
$found = true;
$city = mysqli_fetch_array($sSQLQuery);
}
$id = mt_rand(1,$max);
}
unset($found);
(Существует намного больше, что можно сделать, а код здесь не идеальный - далеко от него), но концепция, которую я хочу получить, заключается в том, что с любой таблицей базы данных значимого размера, тогда она лучше и намного эффективнее для «случайный» фактор, который будет использоваться PHP, а не из MySQL внутри. PHP предлагает более случайную область и более легкое случайное генерирование, которое MySQL и таблицы выше 1000 rows, RAND()
действительно, этого следует избегать, я обнаружил, что он добавляет ~ 0,25-0,4 секунды к загрузке страниц, заказывая набор из 100 результатов «случайным» способом из таблицы ~ 500.)
Также изучите и используйте MySQLi (или PDO), если это важно, в MySQL_ нет будущего (и небольшого присутствия). Updating from MYSQL to MYSQLI
'mysql_query()' запускает запрос, вы должны иметь 'mysql_fetch_row()', чтобы соответствовать соответствующему городу, не так ли! – MaK
Пожалуйста, избегайте использования 'mysql_query()' оно устарело в последних версиях. Используйте 'mysqli_ *' или PDO. –