|
|
|
| Необходимо выбрать 10 записей случайным образом.
До недавнего времени пользовался запросом:
SELECT * FROM 'guestbase' ORDER BY RAND() LIMIT 10
Но теперь мне нужно, случайным образом сформировать список и запомнить его. Поначалу я подумал что, возможно заменив RAND() на число, которое он возвращает, у меня все получиться, то есть запрос стал таким:
SELECT * FROM 'guestbase' ORDER BY 0.34317664740903 LIMIT 10
НО! записи выдаются не в случайном порядке. Как будто не видит ORDER BY!
Помогите. Нужно выбрать случайный образом список и сохранить результат. | |
|
|
|
|
|
|
|
для: Artem S.
(23.04.2005 в 08:42)
| | Повторить нужно на этой же странице или уже при следующем соединении с базой данных? Дело в том, что если передать RAND() значение числа, она всякий раз должна генерировать одинаковую последовательность случайных чисел (в пределах одной сессии).
Кроме того, нельзя запомнить последовательность первичных ключей в какую-нибудь промежуточную строку (34,56,2,78,90,45), а затем использовать запрос вида
SELECT * FROM guestbase IN (34,56,2,78,90,45)
|
| |
|
|
|
|
|
|
|
для: cheops
(23.04.2005 в 11:38)
| | Нужно это при следующем соединении с базой данных.
Идет выбор списка пользователей и рассылка им сообщений. При этом идет рассылка сообщений не за "раз" а по 50 пользователей при каждом запуске скрипта. То есть сначала от 0-50, потом от 50-100 - вот тут то и нужно сохранить последовательность, при этом база постоянно увеличивается, и желательно, чтоб новые пользователи не влияли на сохраненную последовательность, и добавлялись в конец списка (или вообще не добавлялись)
При новой рассылке, последовательность должна быть уже другой.
Или может, подскажете, как по другому принципу организовать случайно сформированный список, где бы не повторялись записи. | |
|
|
|
|
|
|
|
для: Artem S.
(23.04.2005 в 11:57)
| | Хм... а почему именно случайно, гораздо проще и приятнее последовательно рассылать... производственная необходимость? | |
|
|
|
|
|
|
|
для: cheops
(23.04.2005 в 21:16)
| | Рассылок несколько. Если их начать рассылать одновременно, то первые пользователи получать сразу несколько писем, в то время как "новички" будут дожидаться рассылки дольше всех.
Хотелось бы уровнять их в правах, на сколько это возможно. | |
|
|
|
|
|
|
|
для: Artem S.
(23.04.2005 в 21:28)
| | Хм... а может сначала одну рассылку отправлять, а затем вторую. Тогда ждать второй рассылки придётся и старожилам. Да и если человек получается письмо каждый раз в 12:20, наверное у него не появится комплекс неполноценности, если кто-то получается тоже письмо в 12:00. А тем более вторая рассылка не начнётся пока не закончится первая. | |
|
|
|
|
|
|
|
для: cheops
(24.04.2005 в 13:55)
| | Спасибо. Но, посидев денек, сделал, как хотел изначально.
Использую RAND(N), и ограничиваю id, то есть
"SELECT * FROM guestbase WHERE id < ". $num ." ORDER BY RAND(1)"
если $num не менять, то список будит одинаковым, даже через день.
$num меняется к каждой следующей рассылке (это кол-во пользователей) | |
|
|
|