ещё раз о случайных выборках

zerkms

TDD infected
Команда форума
ещё раз о случайных выборках

привет
столкнулся со старой уже как мир проблемой - случайно вытащить записи из базы, почитал ман по MySQL.
в ранее обсуждаемых темах было предложено решение юзать примерно так:
SELECT row FROM table ORDER BY rand() LIMIT 10
если я правильно понял содержимое статьи мануала, то если в качестве параметра к ORDER BY указывается число, то сортировка будет производится по тому стоблцу, номер которого как раз и свопадает с этим параметром. так вот получается, что если в табле мало столбцов, то и псевдослучайных выборок будет тоже мало.
поясню: если есть 2 столбца, id и name, то число "случайных" выборок максимально будет ограничена 2-мя (если только ASC) или 4-мя (если добавить случайное DESC), а именно:
ORDER BY id
ORDER BY name
ORDER BY id DESC
ORDER BY name DESC
есть ли более "случайный" метод выборки? или я что-то напутал?
 

Фанат

oncle terrible
Команда форума
если я правильно понял
нет
или я что-то напутал
да
ORDER BY id
ORDER BY name
ORDER BY id DESC
ORDER BY name DESC
ЭТО вообще бессмыслица какая-то.
вредно работать по ночам.

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

Falc

Новичок
zerkms
>>то если в качестве параметра к ORDER BY указывается число, то сортировка будет производится по тому стоблцу, номер которого как раз и свопадает с этим параметром.

rand() - это не число, поэтому данный абзац к нему не относится.
Когда ты делаешь ORDER BY field1, ты же не сортируешь по столбцу номер которого содержется в field1.

SELECT row FROM table ORDER BY rand() LIMIT 10
эквивалентно:
SELECT rand(), row FROM table ORDER BY 1 LIMIT 10
 

ForJest

- свежая кровь
хинт: выведи
SELECT *, rand() AS f_rand FROM table1 ORDER BY f_rand LIMIT 10;
Информация для размышлений - при 500 000 записей данный запрос занимает примерно 3 секнунды на Cel 666 WinXP MySQL 4.0.13
-------------------------
Информация к прочтению:

http://phpclub.ru/talk/showthread.php?s=&threadid=28419&highlight=RANDhttp://phpclub.ru/talk/showth
http://phpclub.ru/talk/showthread.php?s=&threadid=38676&highlight=RAND
 
Сверху