Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Случайный выбор из базы данных
 
 автор: Artem S.   (23.04.2005 в 08:42)   письмо автору
 
 

Необходимо выбрать 10 записей случайным образом.
До недавнего времени пользовался запросом:
SELECT * FROM 'guestbase' ORDER BY RAND() LIMIT 10

Но теперь мне нужно, случайным образом сформировать список и запомнить его. Поначалу я подумал что, возможно заменив RAND() на число, которое он возвращает, у меня все получиться, то есть запрос стал таким:
SELECT * FROM 'guestbase' ORDER BY 0.34317664740903 LIMIT 10

НО! записи выдаются не в случайном порядке. Как будто не видит ORDER BY!
Помогите. Нужно выбрать случайный образом список и сохранить результат.

   
 
 автор: cheops   (23.04.2005 в 11:38)   письмо автору
 
   для: Artem S.   (23.04.2005 в 08:42)
 

Повторить нужно на этой же странице или уже при следующем соединении с базой данных? Дело в том, что если передать RAND() значение числа, она всякий раз должна генерировать одинаковую последовательность случайных чисел (в пределах одной сессии).
Кроме того, нельзя запомнить последовательность первичных ключей в какую-нибудь промежуточную строку (34,56,2,78,90,45), а затем использовать запрос вида
SELECT * FROM guestbase IN (34,56,2,78,90,45)

   
 
 автор: Artem S.   (23.04.2005 в 11:57)   письмо автору
 
   для: cheops   (23.04.2005 в 11:38)
 

Нужно это при следующем соединении с базой данных.
Идет выбор списка пользователей и рассылка им сообщений. При этом идет рассылка сообщений не за "раз" а по 50 пользователей при каждом запуске скрипта. То есть сначала от 0-50, потом от 50-100 - вот тут то и нужно сохранить последовательность, при этом база постоянно увеличивается, и желательно, чтоб новые пользователи не влияли на сохраненную последовательность, и добавлялись в конец списка (или вообще не добавлялись)

При новой рассылке, последовательность должна быть уже другой.
Или может, подскажете, как по другому принципу организовать случайно сформированный список, где бы не повторялись записи.

   
 
 автор: cheops   (23.04.2005 в 21:16)   письмо автору
 
   для: Artem S.   (23.04.2005 в 11:57)
 

Хм... а почему именно случайно, гораздо проще и приятнее последовательно рассылать... производственная необходимость?

   
 
 автор: Artem S.   (23.04.2005 в 21:28)   письмо автору
 
   для: cheops   (23.04.2005 в 21:16)
 

Рассылок несколько. Если их начать рассылать одновременно, то первые пользователи получать сразу несколько писем, в то время как "новички" будут дожидаться рассылки дольше всех.
Хотелось бы уровнять их в правах, на сколько это возможно.

   
 
 автор: cheops   (24.04.2005 в 13:55)   письмо автору
 
   для: Artem S.   (23.04.2005 в 21:28)
 

Хм... а может сначала одну рассылку отправлять, а затем вторую. Тогда ждать второй рассылки придётся и старожилам. Да и если человек получается письмо каждый раз в 12:20, наверное у него не появится комплекс неполноценности, если кто-то получается тоже письмо в 12:00. А тем более вторая рассылка не начнётся пока не закончится первая.

   
 
 автор: Artem S.   (24.04.2005 в 16:13)   письмо автору
 
   для: cheops   (24.04.2005 в 13:55)
 

Спасибо. Но, посидев денек, сделал, как хотел изначально.
Использую RAND(N), и ограничиваю id, то есть
"SELECT * FROM guestbase WHERE id < ". $num ." ORDER BY RAND(1)"

если $num не менять, то список будит одинаковым, даже через день.
$num меняется к каждой следующей рассылке (это кол-во пользователей)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования