Sql.RU
Сайт SQL.ru сборище непрофессиональный статей на тему разнообразных СУБД. Никакого отбора. Два примера:
Статья о поиске на базе PHP и MySQL
Ни слова о mnogosearch, поиске по релевантности в MySQL (тут можно простить возможно статья старая), ereg_replace, mysql_result и прочее.
Статья «Случайный выбор записей из базы данных с помощью PHP»
Чем автора не устроил mysql_data_seek(случайное_число) или SELECT * FROM table ORDER BY rand() LIMIT сколько_там_надо? Загадка.
SELECT * FROM table ORDER BY rand().
Пробовали. Оказалось, что ВОЗМОЖНЫ ситуации, когда на статистически значимой выборке НЕКОТОРЫЕ записи не выбираются то есть ВООБЩЕ :)
В самом деле, там, видимо, не раномерное распределение, а какое-то другое, недокументированное…
А вот mysql_data_seek — самое оно. Ну, правда, лишний запрос на вычисление количества записей, но это всего 2 запроса, причем всегда, а не N…
Комментарий для said:
Если выбирать всю таблицу, а потом делать mysql_data_seek, то кол-во строк можно узнать — mysql_num_rows. Иначе можно сначала SELECT COUNT(*) FROM, потом — SELECT * FROM … LIMIT n,m.
ORDER BY rand(). Отличный способ положить сервер. Открываем страницу с этим скриптом в нескольких окнах, и, если записей много, серверу поплохеет.
Комментарий для detail:
Отчего ему поплохеет? Обоснование?
Как отчего! rand надо считать для всех рядов таблицы. При этом в твоём запросе всю * надо грузить в память.
Комментарий для detail:
Я же не предлагаю использовать его везде и всюду. Представь, что в таблице порядка 10—50 строк.
Есть другие способы — LIMIT m,n, mysql_data_seek. Я о них упоминал.
Тогда нет возражений. Просто, не глядя на ссылку, можно подумать, что ты рекомендуешь это к любой случайной выборке.
Комментарий для detail:
Нет, конечно :) Там же упомянут как минимум mysql_data_seek :)