| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Случайные строки |
| Автор: BASILIO 9.4.2008, 20:34 | ||||
Есть таблица
Есть запрос:
В таблице будет потом огромное количество записей, а мне надо выбрать 5 случайных из них, генирировать через ПХП по ID не выход, есть ли способ сделать это внутри sql-запроса, чтоб выдался самый обыкновенный массив с 5-ю случайными строчками? |
| Автор: skyboy 10.4.2008, 00:06 | ||||
| если 5 всего, то лучше так: 1. получаем количество записей 2. пять раз делаем следующее: а. получить случайное число от 1 до количества записей(@number) б. выполнить запрос
есть вариант:
но этот вариант вызывает filesort, следовательно, не используется индексы, следовательно, будет сильно тормозить на большом количестве записей. потому, коль у тебя так много записей, воспользуйся лучше первым вариантом |
| Автор: Fortop 10.4.2008, 01:19 |
| Генерируй случайные ID на стороне приложения, а в запрос передавай уже конкретные ID все сразу |
| Автор: BASILIO 10.4.2008, 01:38 | ||
Проблема в том что даааалеко не все ИД будут подходить по условия выборки |
| Автор: Fortop 10.4.2008, 01:51 |
| Тут либо шашечки, либо ехать. Если ты хочешь случайные записи из немерянной таблицы, да еще по зубодробительному условию - то выхода у тебя другого нет. Н запросов с случайным LIMIT, как и писал skyboy, |
| Автор: BASILIO 10.4.2008, 17:10 |
| Fortop, ну если я правельно понял лимит, то допустим 100 записей, рандомом выкидывается число 95, но в оставшихся 5-ти строчках нету не одной чтоб подходила, что тогда вернёт запрос? |
| Автор: Feldmarschall 10.4.2008, 17:12 |
| ты неправильно понял лимит |
| Автор: Akina 10.4.2008, 17:37 |
| Отбор подходящих по WHERE записей выполняется до применения LIMIT, так что неподходящие в выборку не попадут. Или ты неверно задаешь условия отбора. |
| Автор: BASILIO 10.4.2008, 17:42 |
+ Вытекающий вопрос, как лутче всего получить количество записей? а. Через PHP mysql_num_rows() б. SQL-командой |