MySQL在查询中使用来自另一个查询的结果?

时间:2011-10-15 20:30:31

标签: php mysql phpmyadmin

我需要一些帮助来创建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。

非常感谢任何帮助

1 个答案:

答案 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 JOINJOIN EventUserTags ON (Events.Event_ID = EventUserTags.Event_ID)的捷径。它的工作原理是因为您加入的密钥具有相同的名称。

然后,只有当链接包含您正在查找的用户时,才会加入相应的用户ID。