【发布时间】:2014-09-02 20:14:53
【问题描述】:
我有表用户、活动(公共、私人或秘密类型)、服务员、组织者,我需要选择用户 1 是服务员或组织者的所有活动,除了秘密活动,其中用户 2 不是(参加或组织者或受邀)。
这个巨大的 SELECT 可以满足我的所有需要,但它包含许多其他 SELECT。 是否可以以某种方式对其进行优化,例如将由 cmets 从这里到这里的联合体放入某种变量并重新使用它?
编辑:当时我需要能够处理更多这些请求。
SELECT `event`.id AS eventid, event.name AS ename
FROM attendant
INNER JOIN user ON attendant.fk_user = user.id
INNER JOIN event ON attendant.fk_event = `event`.id
WHERE user.id = 2
AND attendant.fk_event = `event`.id
AND `event`.id IN
-- FROM HERE
(
SELECT `event`.id
FROM attendant
INNER JOIN user ON attendant.fk_user = user.id
INNER JOIN event ON attendant.fk_event = `event`.id
WHERE user.id = 1
AND attendant.fk_event = `event`.id
UNION
SELECT `event`.id
FROM organizer
INNER JOIN user ON organizer.fk_user = user.id
INNER JOIN event ON organizer.fk_event = event.id
WHERE user.id = 1
AND organizer.fk_event = event.id
UNION
SELECT `event`.id
FROM invitation
INNER JOIN user ON invitation.fk_user_to = user.id
INNER JOIN event ON invitation.fk_event = event.id
WHERE invitation.fk_user_to = 1
AND invitation.fk_event = event.id)
-- TO HERE
UNION
SELECT `event`.id AS eventid, event.name AS ename
FROM organizer
INNER JOIN user ON organizer.fk_user = user.id
INNER JOIN event ON organizer.fk_event = event.id
WHERE user.id = 2
AND organizer.fk_event = event.id
AND `event`.id IN
(
-- FROM HERE
SELECT `event`.id
FROM attendant
INNER JOIN user ON attendant.fk_user = user.id
INNER JOIN event ON attendant.fk_event = `event`.id
WHERE user.id = 1
AND attendant.fk_event = `event`.id
UNION
SELECT `event`.id
FROM organizer
INNER JOIN user ON organizer.fk_user = user.id
INNER JOIN event ON organizer.fk_event = event.id
WHERE user.id = 1
AND organizer.fk_event = event.id
UNION
SELECT `event`.id
FROM invitation
INNER JOIN user ON invitation.fk_user_to = user.id
INNER JOIN event ON invitation.fk_event = event.id
WHERE invitation.fk_user_to = 1
AND invitation.fk_event = event.id);
-- TO HERE
【问题讨论】:
-
如果它起作用了,这可能应该继续进行 CodeReview 左右......
-
@user2366842 我宁愿寻找技巧,如何将查询结果存储在某种“变量”中(我知道普通变量不可能),这就是我使用这个网站的原因。
标签: mysql optimization query-optimization