所以我对 LEFT JOIN 提出了一个问题,此代码会为 totalPoints 返回不同的值,具体取决于用户是否获得了该组。 (如果用户没有得到组或事件,则返回正确的值)
我只想了解如何获得 LEFT JOIN flow_ _vote ON flow_ _vote.flow_id = flows.id 上班每次。我之前用三个查询做了一个解决方案,一个获取组和事件规则,一个用于检查用户是否获得了考虑安全性的组或事件,另一个用于获取流程...
我想我可以通过两个查询解决这个问题,一个获取组和事件规则,还检查用户是否获得了组和事件,然后根据用户获得流量的查询访问它。
现在,我正在获取一个查询中所需的所有信息,然后使用IF语句检查是否应该打印...
所以,我的问题是,是否可以通过这种方式获得 SUM(flow_ has _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
答案 0 :(得分:0)
因此,基本上主要观点(恕我直言)不包括LEFT JOINed
子句中WHERE
的表格条件,因为这会使LEFT JOIN
表现得像INNER JOIN
}。
从尝试此查询开始(虽然我确定您必须进行调整,因为我不确定您想要的结果,稍后会详细介绍):
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,
LEFT JOIN user__has__event
ON user__has__event.user_id = users.id,
LEFT JOIN events
ON user__has__event.event_id = events.id
LEFT JOIN user__has__group
ON user__has__group.user_id = users.id,
LEFT JOIN groups
ON user__has__group.group_id = groups.id
AND groups.id = events.group_id
LEFT JOIN flows
ON flows.user_id = users.id
AND events.id = flows.event_id
AND flows.id='.$flowId'
LEFT JOIN flow__has__vote
ON flow__has__vote.flow_id = flows.id
WHERE users.id = '.$userId.'
GROUP BY users.id
在这里,我LEFT JOINed
向用户提供一切,并由用户分组。我觉得您希望按(flows.id
?,events.id
添加列?{/ p>
此外,您可能希望将部分LEFT JOINs
转为JOIN
,因此您只会获得拥有“流量”的用户。