Для случайного выбора записей из одной таблицы; я должен всегда устанавливать временную переменную в PHP? Мне нужна помощь в выборе случайных строк в модели CodeIgniter, а затем отображать три разных вида в представлении каждый раз, когда просматривается моя домашняя страница. У кого-нибудь есть мысли о том, как решить эту проблему? Заранее спасибо!Случайный выбор строк с помощью MySQL
ответ
У меня есть эта часть кода в производстве, чтобы получить случайную цитату. Использование функции RAND в MySQL было очень медленным. Даже с 100 котировками в базе данных я заметил время ожидания на веб-сайте. С этим не было никакого отставания.
$result = mysql_query('SELECT COUNT(*) FROM quotes');
$count = mysql_fetch_row($result);
$id = rand(1, $count[0]);
$result = mysql_query("SELECT author, quote FROM quotes WHERE id=$id");
Я хотел бы сделать что-то вроде:
SELECT * FROM table ORDER BY RAND() LIMIT 1;
Это поместит данные в случайном порядке, а затем возвращает только первую строку из этой случайной последовательности.
Если вы не имеете тонну строк, вы можете просто:
SELECT * FROM myTable ORDER BY RAND() LIMIT 3;
Если у вас есть много строк, это будет получить медленно, но для наборов данных меньше он будет работать нормально.
Как говорит Стив Мишель в своем ответе, этот метод может стать очень уродливым для больших столов. Его предложение - хорошее место, чтобы спрыгнуть. Если вы знаете приблизительное максимальное целое число ПК на столе, вы можете сделать что-то вроде генерации случайного числа от одного до вашего значения макс ПК, а затем захватить случайные ряды друг в то время как:
$q="SELECT * FROM table WHERE id >= {$myRandomValue}";
$row = $db->fetchOne($q); //or whatever CI's interface to grab a single is like
Конечно, если вам нужно 3 случайных строки, у вас будет три запроса здесь, но поскольку они полностью на ПК, они будут быстрыми (чем рандомизация всей таблицы).
вам нужен запрос, как это:
SELECT *
FROM tablename
WHERE somefield='something'
ORDER BY RAND() LIMIT 3
Он взят из второго результата http://www.google.com/search?q=mysql+random и он должен работать;)
Заказ большой стол по RAND() может быть очень дорого, если таблица очень большая. MySQL должен будет создать временную таблицу и отсортировать ее. Если у вас есть первичный ключ, и вы знаете, сколько строк в таблице, используйте LIMIT x, 1, чтобы захватить случайную строку, где x - номер строки, которую вы хотите получить.
- 1. Случайный выбор числа строк
- 2. Выбор строк из mysql с помощью regexp
- 3. Случайный выбор строки с помощью MySQL возвращает NULL
- 4. Случайный выбор из mysql, но не дважды
- 5. Случайный выбор столбцов с помощью команды linux
- 6. Случайный выбор элемента из массива строк
- 7. Случайный выбор строк из набора результатов sql?
- 8. Android: случайный выбор строк из массива
- 9. Случайный выбор строк в MongoDB async
- 10. Случайный выбор взвешенных товаров
- 11. Выбор определенных строк MYSQL
- 12. Случайный выбор после фильтра в mysql
- 13. как mysql случайный выбор таблицы имя
- 14. Случайный выбор в EarlGrey
- 15. MySQL - Выбор нескольких строк эффективно
- 16. Случайный выбор в JQuery
- 17. Изменение строк в MYSQL. Выбор
- 18. Случайный случайный выбор <table> колонки
- 19. Равномерный случайный выбор с заменой
- 20. Случайный выбор с отрицательными весами
- 21. Случайный выбор переменных в SQL
- 22. Случайный выбор динамических флажков
- 23. Запрос MySQL с помощью CodeIgniter, выбор строк, где поле NULL
- 24. Случайный порядок для группы строк в mysql
- 25. Выбор окружающих строк php/mysql
- 26. Случайный выбор результата запроса Linq
- 27. Случайный выбор ограниченного количества записей с двумя условиями в MySQL
- 28. MySQL одновременный выбор из строк
- 29. Случайный выбор словарных слов
- 30. IMacros случайный выбор