
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.10.2009, 18:45
|
|||
|---|---|---|---|
|
|||
Многие-к-многим - можно ли группировать? |
|||
|
#18+
Всем привет. Возможно, простой вопрос, но сообразить никак не могу. Дано. Таблица объектов А (ida, namea). Таблица свойств В (idb, nameb). Таблица связей С (idc, idxa, idxb, probc), реализуюшая отношение многие-к-многим (+ вероятность каждого отношения). Требуется. Выполнить запрос вида "Получить все А, для которых (Б = Б1 или Б=Б2 ...) и (Б = Б3 или Б = Б4 ...)" Решается на данный момент пересечением вида SELECT ida FROM C INNER JOIN A ON idxa = ida INNER JOIN B ON idxb = idb WHERE (nameb = B1 OR nameb = B2) INTERSECT SELECT ida FROM C INNER JOIN A ON idxa = ida INNER JOIN B ON idxb = idb WHERE (nameb = B3 OR nameb = B3) Но есть две проблемы. Во-первых, использование INTERSECT представляется не самым быстрым вариантом. Можно ли как-то иначе? Во-вторых, допустим у нас в результате среди прочих выбран объект А123, у которого есть связь А123-Б1 с вероятностью probc = 0.1, связь А123-Б2 с вероятностью probc = 0.2 и есть связь А123-Б3 с вероятностью probc = 0.3. Требуется посчитать произведения пар вероятностей, т.е. для пары А123-Б1 и А123-Б3 (0.1 * 0.3), и пары А123-Б2 и А123-Б3 (0.2 * 0.3). В SELECT вставлять нельзя, не будет работать INTERSECT (вероятности-то разные). Сейчас это делается вторым запросом, по А, найденным запросом, приведенным выше. Но может можно как-то объединить в один запрос? Спасибо за любые советы. С уважением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 19:00
|
|||
|---|---|---|---|
Многие-к-многим - можно ли группировать? |
|||
|
#18+
самое простое - замените INTERSECT на JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 19:11
|
|||
|---|---|---|---|
Многие-к-многим - можно ли группировать? |
|||
|
#18+
Насчет вероятностей - как-то так? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.10.2009, 01:14
|
|||
|---|---|---|---|
|
|||
Многие-к-многим - можно ли группировать? |
|||
|
#18+
Приветствую, Все работает! Поправил вероятности (это поле таблицы связей С, а не таблицы свойств В), в окончательном виде выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&mobile=1&tid=1543031]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
176ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 466ms |

| 0 / 0 |
