我需要一些帮助来创建mySQL数据库的查询。我最近开始使用JOIN和IN从我的数据库中选择行,所以我为听起来像菜鸟而道歉。
我不是在寻找答案(虽然一个人会很好!)但我会非常感谢您应该从我的查询开始的建议。请不要只发布指向PHP网站或教程的链接。
在我的数据库中,用户是“链接的”,订单并不重要。
表名:UserLinks
link_ID User_1 User_2
1 10982* 34982
2 82738 16643
3 10982* 99822
4 78256 10982*
我关注的用户是用户10982
1)我想要创建的此查询的第一部分找到该用户(10982)链接到的用户的ID。这些用户是用户34982,99822和78256.我想它就像SELECT * FROM UserLinks WHERE User_1 OR User_2 = 10982
一样简单,我的问题是,如何获取值 - 假设我不能简单地选择要返回的行(我考虑过)使用if语句...如果User_1的值是10982,则选择User_2。但这似乎是多余的。
有了这个用户ID列表,我想运行查询的第二部分,找到哪个Event_ID对应于这个用户列表(用户的ID现在是UserEv_ID):
表名:EventUserTags
ETag_ID UserEv_ID Event_ID
1 34982* 289
2 82738 231
3 99822* 990
4 78256* 486
2)此查询的第二部分将使用从第一个查询(用户ID)生成的列表生成Event_ID列表。我知道您可以使用IN语句并将此列表作为数组转储到查询中,但这意味着将查询的第一部分的结果转换为数组。这再一次,似乎是多余的。我想知道如何使用用户ID正确选择这些Event_ID ...我认为JOIN查询可以工作,但我需要一些关于如何使用它的建议。
这里获得的Event_ID的值是289,990和486.在这个查询的最后一部分,我需要使用从上一个查询生成的Event_ID列表来匹配另一个表的数据,我的活动表。
表名:事件
Event_ID Event_Order
182 8728342
289 3478792*
990 1876623*
486 9617789**
3)最后,我需要使用从上一个查询中获得的Event_ID来获取相应的Even_Order。同样,我知道这可以使用IN语句(使用数组)完成,但这根本不会有效。
此查询的目的是从单个用户的ID开始,并找到该用户链接到的每个用户的Event_Order。
非常感谢任何帮助
答案 0 :(得分:1)
这一切都可以在一个查询中相当简单地完成,我将编写并解释:
SELECT
Event_Order, -- I think this is the one you need, but selecting other fields anyway
Event_ID,
User_1,
User_2
FROM
Events
NATURAL JOIN EventUserTags
JOIN UserLinks ON (
UserEv_ID = User_1 AND User_2 = 10982
OR UserEv_ID = User_2 AND User_1 = 10982
)
NATURAL JOIN
是JOIN EventUserTags ON (Events.Event_ID = EventUserTags.Event_ID)
的捷径。它的工作原理是因为您加入的密钥具有相同的名称。
然后,只有当链接包含您正在查找的用户时,才会加入相应的用户ID。