Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
Подскажите, можно ли такую задачу решить полностью на стороне БД или без обработки на клиенте не обойтись? Есть БД с календарными событиями. Структура БД такова, что события могут быть разовые (на конкретную дату), еженедельные (на определенный день недели), ежемесячные (на конкретный день месяца) и ежегодные. События могут быть разного типа. Для некоторых типов есть дополнительное поле приоритета (чтобы упорядочить события одинакового типа). Есть запрос, который на конкретную дату возвращает полный набор соответствующих событий. Мне из этого набора нужно получить одно единственное событие (если оно вообще есть), по критериям в следующем порядке. 1. Если на указанную дату есть официальный государственный праздник, то в интервале времени с 10:00 до 19:00 выбирается этот праздник. В остальное время (с 00:00 до 10:00 и с 19:00 до 00:00) этот праздник выбирается с вероятностью 50% (то есть в половине случаев он не выбирается и проверяются другие критерии). [тип="государственные праздники"] 2. Если на указанную дату есть какие-то религиозные события, то в интервале времени с 10:00 до 19:00 выбираются они. В остальное время это событие выбирается с вероятностью 50%. [тип="религиозные праздники"] 3. Если на указанную дату есть какие-то устоявшиеся (но не официальные) события, типа "Старый новый год", "День дурака", то выбираются они. [тип="неофициальные праздники"] 4. Если на указанную дату есть какие-то юбилейные события (годовщины), то выбираются они. [тип="юбилеи"] 5. Если на указанную дату есть какие-то шутливые праздники (типа праздников на каждый день), то с вероятностью 50% выбираются они, независимо от времени суток. [тип="шутливые праздники"] 6. Если есть какие-то другие события, то с вероятностью 50% выбираются они. [тип="прочее"] Критерии проверяются в указанном порядке. Если на какую-то дату попадает более одного события, то выбирается только одно из них (с наибольшим приоритетом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2018, 10:48 |
|
||
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
Alibek B.Есть запрос, который на конкретную дату возвращает полный набор соответствующих событий. Мне из этого набора нужно получить одно единственное событие (если оно вообще есть), по критериям в следующем порядке.Если не принимать в расчет вероятности в 5 и 6 пунктах, то решается просто - отсортировать в порядке убывания приоритета и взять первую запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2018, 11:43 |
|
||
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
Вероятности почти во всех пунктах есть, мне хотелось бы получить некоторую вариативность результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2018, 13:21 |
|
||
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
да в процедуру всю эту логику можно разобрать, в чём сложность то? подставлять нужное во WHERE, в зависимости от рандома ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2018, 14:37 |
|
||
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
Alibek B.Вероятности почти во всех пунктах есть, мне хотелось бы получить некоторую вариативность результатов.Ну тогда добавить во все выбираемый записи случайное число, а перед сортировкой отфильтровать по нему с использованием порога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2018, 14:39 |
|
||
|
Выборка данных по многофакторным критериям + рандом
|
|||
|---|---|---|---|
|
#18+
Понятно. Мне почему-то казалось, что функция rand в запросе вычисляется один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2018, 08:37 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=53&tid=1829864]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 367ms |

| 0 / 0 |
