|
|
|
| Можно ли как-то реализовать выборку по rand , но некоторые строчки должны иметь приоритет? Я понимаю, что прямого хода такого может и не быть, но можно ли это как-то сделать хитрым путем? Потому как то что придумал я - меня немного смущает, хотелось бы понять - возможно есть варианты?.. | |
|
|
|
|
|
|
|
для: Shorr Kan
(28.10.2005 в 06:40)
| | На мой взгляд единственный способ это продублировать данные в БД. Т.е.
id | name | ...
1 | Что -то | ...
2 | Что -то | ...
3 | Что -то2 | ...
|
| |
|
|
|
|
|
|
|
для: 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 будут выведены первыми. | |
|
|
|
|
|
|
|
для: Axxil
(28.10.2005 в 09:16)
| | Я бы развил тему: начальный приоритет 1 а потом повышающие до бесконечности. После выборки переносим данные в массив, дублируя каждую запись в соответствии с приоритетом, а затем выбираем случайные данные из массива. | |
|
|
|
|
|
|
|
для: Axxil
(28.10.2005 в 09:16)
| | Честно говоря, я не понял конструкцию order by if(prior=1,0,1),rand() . В документашке не нашел... Можно ссылочку на описание сего дела? | |
|
|
|
|
|
|
|
для: 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 в результатах... | |
|
|
|
|
|
|
|
для: cheops
(28.10.2005 в 12:46)
| | будут. Сначала будут идти записи с prior=1 отсортированные в случайном порядке, а потом все остальные с любым prior также отсортированные в случайном порядке.
Кстати... Так очень удобно прикреплённые темы в форумах делать, и новости главные... | |
|
|
|
|
|
|
|
для: Axxil
(28.10.2005 в 12:53)
| | А если мне prior нужно сделать до 10 ? Чем больше цифра - тем вероятнее выпадение строки.
p.s. Это все равно что-то не то. Мне ведь нужен не порядок выведения, а выборка случайной строчки. Причем, с бОльшей вероятностью должна выпасть та, у которой prior - выше. | |
|
|
|
|
|
|
|
для: Shorr Kan
(29.10.2005 в 23:11)
| | Это уже попахивает мат. статистикой и распределением Гауса :)
Чисто на на MySql скорее всего вряд ли тогда получится. А вот на php по-моему есть такие функции, но в крайнем случае всегда можно написать свою | |
|
|
|
|
|
|
|
для: Axxil
(31.10.2005 в 10:09)
| | Стат.функции в MySQL тоже имеются, но на PHP действительно проще получится... | |
|
|
|