Итак, я получил вопрос о LEFT JOIN , этот код возвращает различные значения для totalPoints в зависимости от того, получил пользователь группу или нет. (если пользователь не получил группу или событие, он возвращает правильное значение)
Я просто хочу понять, как заставить LEFT JOIN flow_ иметь _vote ON flow_ , чтобы _vote.flow_id = flows.id работал каждый раз. Ранее я делал решение с тремя запросами, один из которых получает правило группы и события, другой проверяет, получил ли пользователь группу или событие с учетом безопасности, а другой - поток ...
И я думаю, что я мог бы решить эту проблему, имея два запроса, один из которых получает правила группы и события, а также проверял, получил ли пользователь группу и событие, а затем тот, который получает поток в зависимости от пользователя, должен иметь доступ к нему.
Прямо сейчас я получаю всю информацию, необходимую в ОДНОМ запросе, а затем проверяю операторы IF, должна ли она быть напечатана или нет ...
Итак, мой вопрос: возможно ли получить SUM (flow_ имеет _vote.points) AS totalPoints для работы таким образом? А ты знаешь как?
А еще я немного удивлен, один запрос - лучший способ работать с этим? Будет ли оправданным использование двух, когда вы принимаете во внимание производительность?
SELECT
flows.id AS flowId,
flows.security,
SUM(flow__has__vote.points) AS totalPoints,
users.id AS userId,
users.alias,
flows.event_id AS eventId,
events.group_id AS groupId,
events.membershipRules AS eMR,
groups.membershipRules AS gMR,
user__has__group.permission AS userHasGroup,
user__has__event.permission AS userHasEvent
FROM
users,
events LEFT JOIN user__has__event ON user__has__event.user_id = '.$userId.',
groups LEFT JOIN user__has__group ON user__has__group.user_id = '.$userId.',
flows LEFT JOIN flow__has__vote ON flow__has__vote.flow_id=flows.id
WHERE
flows.user_id = users.id AND
events.id = flows.event_id AND
groups.id = events.group_id AND
flows.id='.$flowId
И если вам интересно, что делает SQL-оператор, получая информацию о потоке (post), информацию о событии и группе, в которой находится поток, проверяя доступ пользователя к группе и событию, а также получая все голоса за поток ...
Вот так выглядят таблицы ...
FLOWS id,security,event_id,user_id
USERS id, alias
EVENTS id, name group_id, membershipRules
GROUPS id, name, membershipRules
USER__HAS__GROUP user_id,group_id,permission
USER__HAS__EVENT user_id,event_id,permission
FLOW__HAS__VOTE flow_id,user_id,points
Это результат, который я хочу ...
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
| flowId | security | totalPoints | userId | alias | eventId | groupId | eMR | gMR | userHasGroup | userHasEvent |
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
| 1 | 2 | 1337 | 5 | Pontus | 15 | 2 | 2 | 2 | 4 | 4 |
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
и еще один пример ...
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
| flowId | security | totalPoints | userId | alias | eventId | groupId | eMR | gMR | userHasGroup | userHasEvent |
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
| 1 | 2 | 1337 | 6 | Kezia | 15 | 2 | 2 | 2 | null | null |
+--------+----------+-------------+--------+--------+---------+---------+-----+-----+--------------+--------------+
Наслаждайся жизнью ~ Pontus