Сейчас я выбираю 3 случайные строки из таблицы, используя ORDER BY Rand();
, как указано во всем Интернете, этот метод выполняется очень медленно. Я использую его в базе данных с 30 строками, и для возврата значения требуется много времени. Большинство других решений, которые я нашел, возвращают только одну строку. Какой лучший способ вернуть несколько случайных строк?
$get_projects_query =
mysql_query(
"SELECT p_id FROM project_data WHERE p_featured='1' ORDER BY Rand() LIMIT 3"
) or die(mysql_error());
while($project_row = mysql_fetch_array($get_projects_query)) {?>
//Do stuff
}
//end three random featured projects loop)
Если есть только 30 строк, у вас есть пара других опций.
Вариант № 1
Вариант № 2
Вариант № 3
Сначала выберите счетчик таблиц. Заказ по столбцу индекса (возможно, первичный ключ). Затем выберите предел 1 со смещением = в случайное целое число в диапазоне от 0 до счетчика таблицы.
Если у вас есть только 30 строк, почему бы не загрузить все 30 строк вашему клиенту, а затем сгенерировать 3 случайных индекса строки
Как говорили все остальные. Имея только 30 элементов в вашем запросе, выполните следующие действия:
Или ваш запрос имеет только на момент 30 результатов, но со временем он будет больше и больше?
order by rand()
не будет работать медленно на таблице только с 30 строками.