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

Форум MySQL

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

 

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

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

тема: rand с приоритетом
 
 автор: Shorr Kan   (28.10.2005 в 06:40)   письмо автору
 
 

Можно ли как-то реализовать выборку по rand , но некоторые строчки должны иметь приоритет? Я понимаю, что прямого хода такого может и не быть, но можно ли это как-то сделать хитрым путем? Потому как то что придумал я - меня немного смущает, хотелось бы понять - возможно есть варианты?..

   
 
 автор: Ziq   (28.10.2005 в 08:56)   письмо автору
 
   для: Shorr Kan   (28.10.2005 в 06:40)
 

На мой взгляд единственный способ это продублировать данные в БД. Т.е.

id |    name    | ...
1  | Что -то    | ...
2  | Что -то    | ...
3  | Что -то2   | ...

   
 
 автор: Axxil   (28.10.2005 в 09:16)   письмо автору
 
   для: Shorr Kan   (28.10.2005 в 06:40)
 

Можно добавить столбец приоритета prior и сделать так:


table news:

id | name | content | prior | 
<?
$sql
='select * from news order by if(prior=1,0,1),rand()';
?>


теперь новости будут выведены в случайном порядке, но те у которых приоритет стоит 1 будут выведены первыми.

   
 
 автор: Loki   (28.10.2005 в 09:55)   письмо автору
 
   для: Axxil   (28.10.2005 в 09:16)
 

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

   
 
 автор: Shorr Kan   (28.10.2005 в 10:30)   письмо автору
 
   для: Axxil   (28.10.2005 в 09:16)
 

Честно говоря, я не понял конструкцию order by if(prior=1,0,1),rand() . В документашке не нашел... Можно ссылочку на описание сего дела?

   
 
 автор: cheops   (28.10.2005 в 12:46)   письмо автору
 
   для: Shorr Kan   (28.10.2005 в 10:30)
 

Конструкция ORDER BY RAND() позволяет выводить записи в случайном порядке. Однако ORDER BY, которая выполняет сортировку может принимать два и более столбца, например,
ORDER BY first, second. Здесь вместо первого столбца используется выражение, в котором участвует столбец prior. Используется функция if(), которая возвращает 0, если prior = 1, и 1 если prior != 1, таким образом все записи с prior = 1 будут расположены в начале, а с 0 в конце... Только я не уверен будут ли попадаться записи с prior = 0 в результатах...

   
 
 автор: Axxil   (28.10.2005 в 12:53)   письмо автору
 
   для: cheops   (28.10.2005 в 12:46)
 

будут. Сначала будут идти записи с prior=1 отсортированные в случайном порядке, а потом все остальные с любым prior также отсортированные в случайном порядке.

Кстати... Так очень удобно прикреплённые темы в форумах делать, и новости главные...

   
 
 автор: Shorr Kan   (29.10.2005 в 23:11)   письмо автору
 
   для: Axxil   (28.10.2005 в 12:53)
 

А если мне prior нужно сделать до 10 ? Чем больше цифра - тем вероятнее выпадение строки.

p.s. Это все равно что-то не то. Мне ведь нужен не порядок выведения, а выборка случайной строчки. Причем, с бОльшей вероятностью должна выпасть та, у которой prior - выше.

   
 
 автор: Axxil   (31.10.2005 в 10:09)   письмо автору
 
   для: Shorr Kan   (29.10.2005 в 23:11)
 

Это уже попахивает мат. статистикой и распределением Гауса :)
Чисто на на MySql скорее всего вряд ли тогда получится. А вот на php по-моему есть такие функции, но в крайнем случае всегда можно написать свою

   
 
 автор: cheops   (31.10.2005 в 12:32)   письмо автору
 
   для: Axxil   (31.10.2005 в 10:09)
 

Стат.функции в MySQL тоже имеются, но на PHP действительно проще получится...

   
Rambler's Top100
вверх

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