我的表格安排如下。为简单起见,我只在每个中显示一个值。
表:事件
Event_ID Event_Title
1 Broad Street Gathering
表:EventUserTags
User_ID Event_ID
10092 1
表:UserLinks
User_1 User_2
10092 29809
如果当前用户的ID为10092:
1)从 UserLinks 中选择ID,其中 User_1 或 User_2 为10092(如果User_1为10092,则选择User_2)
2)使用User_ID(上面获得)从 EventUserTags 中选择 Event_ID
3)使用Event_ID(上面获得)从事件中选择 Event_Title
所以,例如:
如果登录用户的ID为10092,则此查询将获取Event_Title“Broad Street Gathering”
到目前为止,我没有运气。任何帮助都表示赞赏
此网站的用户建议使用:
SELECT
Event_Title,
Event_ID,
User_1,
User_2
FROM
Events
NATURAL JOIN EventUserTags
JOIN UserLinks ON (
User_ID = User_1 AND User_2 = $id
OR User_ID = User_2 AND User_1 = $id
)
答案 0 :(得分:1)
这里的问题是,有时您使用User_1
和有时User_2
加入表格,这不是一个在连接条件下表达的简单概念。
相反,您可以将两个单独的SELECT
和UNION
组合在一起以获得单个结果集。
SELECT UL.User_1 AS User_ID, EUT.Event_ID, E.Event_Title
FROM UserLinks UL
INNER JOIN EventUserTags EUT ON UL.User_1 = EUT.User_ID
INNER JOIN Events E ON E.Event_ID = EUT_Event_ID
WHERE UL.User_1 = :user_id
UNION ALL
SELECT UL.User_2 AS User_ID, EUT.Event_ID, E.Event_Title
FROM UserLinks UL
INNER JOIN EventUserTags EUT ON UL.User_2 = EUT.User_ID
INNER JOIN Events E ON E.Event_ID = EUT_Event_ID
WHERE UL.User_2 = :user_id
答案 1 :(得分:0)
我真的不明白你的UserLinks表的设置。 你真的应该:
user_id link
1 10092
2 29809
然后你可以很容易地使用:
SELECT e.* tags.*, user.*
FROM Events e
JOIN EventUserTags tags
ON tags.event_id=e.event_id
JOIN UserLinks user
ON user.user_id=tags.user_id
WHERE user.user_id=$id
答案 2 :(得分:0)
SELECT e.Event_Title, e.Event_ID,
COALESCE(ul1.User_1, ul2.User_1) AS User_1,
COALESCE(ul1.User_2, ul2.User_2) AS User_2
FROM EventUserTags eut
INNER JOIN Events e
ON eut.Event_ID = e.Event_ID
LEFT JOIN UserLinks ul1
ON eut.User_ID = ul1.User_1
LEFT JOIN UserLinks ul2
ON eut.User_ID = ul2.User_2
WHERE eut.User_ID = $id
AND (ul1.User_1 IS NOT NULL OR ul2.User_2 IS NOT NULL)