Я пытаюсь создать запрос, который возвращает счетчики по типу отношений для всех сущностей в таблице.например.
1|VenueName1|0|0|0|
, где 0,0,0 - это количество найденных связей.
В самой таблице содержится множество внешних связей со многими различными типами внешних элементов.Каждая ассоциация может отображаться в таблице «вперед» или «назад», поэтому, например, каждая связь может отображаться одним из двух способов:
|objectTypeId|objectId|associatedId |associatedTypeId|
| 13 | 1 | 8 | 2 |
| 2 | 8 | 1 | 13 |
Имеет ли смысл?Обычно они появляются только один раз, но могут быть в любом «направлении».Таким образом, чтобы получить общие отношения для данного типа, я использую UNION, подобный следующему:
SELECT ip.id, ip.name, SUM(totalUnion.EventTotals) as Events
FROM iplace ip
LEFT JOIN
(
SELECT object_id, count(*) as EventTotals FROM `iassociation` ia
WHERE object_type_id=2 AND associated_object_type_id=14
GROUP BY object_id
UNION ALL
SELECT associated_object_id, count(*) as EventTotals FROM `iassociation` ia
WHERE associated_object_type_id=2 AND object_type_id=14
GROUP BY associated_object_id
) totalUnion ON ip.id = totalUnion.object_id
WHERE ip.type_id IN (4,7,11,15,16)
GROUP BY ip.id
Это работает нормально. Моя проблема в том, что я хочу сделать то же самое для других 2 типов, даваяеще два SUM (), чтобы показать разные итоги типов отношений для одного объекта.Если я добавлю eextra LEFT JOINs, я получу дублирование строк, и число будет завышено.
Надеюсь, это имеет какой-то смысл.Кто-нибудь может предложить решение?