Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Sql.RU

Сайт SQL.ru — сборище непрофессиональный статей на тему разнообразных СУБД. Никакого отбора. Два примера:

Статья о поиске на базе PHP и MySQL [ <<> ]
Ни слова о mnogosearch, поиске по релевантности в MySQL (тут можно простить — возможно статья старая), ereg_replace, mysql_result и прочее.

Статья «Случайный выбор записей из базы данных с помощью PHP» [ <<> ]
Чем автора не устроил mysql_data_seek(случайное_число) или SELECT * FROM table ORDER BY rand() LIMIT сколько_там_надо? Загадка.

8 комментариев
said 2003

SELECT * FROM table ORDER BY rand().
Пробовали. Оказалось, что ВОЗМОЖНЫ ситуации, когда на статистически значимой выборке НЕКОТОРЫЕ записи не выбираются то есть ВООБЩЕ :)

В самом деле, там, видимо, не раномерное распределение, а какое-то другое, недокументированное…

А вот mysql_data_seek — самое оно. Ну, правда, лишний запрос на вычисление количества записей, но это всего 2 запроса, причем всегда, а не N…

Евгений Степанищев (bolknote.ru) 2003

Комментарий для said:

Если выбирать всю таблицу, а потом делать mysql_data_seek, то кол-во строк можно узнать — mysql_num_rows. Иначе можно сначала SELECT COUNT(*) FROM, потом — SELECT * FROM … LIMIT n,m.

detail 2003

ORDER BY rand(). Отличный способ положить сервер. Открываем страницу с этим скриптом в нескольких окнах, и, если записей много, серверу поплохеет.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

Отчего ему поплохеет? Обоснование?

detail 2003

Как отчего! rand надо считать для всех рядов таблицы. При этом в твоём запросе всю * надо грузить в память.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

Я же не предлагаю использовать его везде и всюду. Представь, что в таблице порядка 10—50 строк.

Есть другие способы — LIMIT m,n, mysql_data_seek. Я о них упоминал.

detail 2003

Тогда нет возражений. Просто, не глядя на ссылку, можно подумать, что ты рекомендуешь это к любой случайной выборке.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для detail:

Нет, конечно :) Там же упомянут как минимум mysql_data_seek :)