-1

我有两张桌子——一张叫做“朋友”,另一张叫做“活动”。

该表friends有列iduser_idfriend_id

该表events有列iduser_idtitle_event

我在“事件”中注册了六个事件:我的第二个、第二个和另一个朋友的朋友 2。

什么查询会返回我在“朋友”表中的朋友以及我的事件和我朋友的事件?

我正在使用下面的查询,它只返回我朋友的事件。如何更改它以返回我的活动和我的朋友呢?

询问:

SELECT *
 FROM (
       SELECT a.user_id, a.friend_id
         FROM tb_friend a
       WHERE a.user_id = 1
       ) friends, 
tb_events e
WHERE e.user_id = friends.friend_id;
4

2 回答 2

0

这是你要找的吗?

SELECT *
FROM (
    SELECT a.user_id, a.friend_id
    FROM tb_friend a
    WHERE a.user_id = 1
    ) friends, 
tb_events e
WHERE e.user_id = friends.friend_id OR e.user_id = 1;

我在这里所做的唯一更改是添加OR e.user_id = 1应该让 MySQL 在结果集中包含您自己的事件。

于 2012-05-06T18:41:50.500 回答
0

您遇到的问题是原始“User_ID = 1”没有条目,只有朋友... Daan 提供的示例使用了 WHERE 子句,显然仍然不适合您。我建议您的内部查询是一个 UNION,将您和您的朋友作为一个结果包含在内...这样,您就有了一个合格的列表...如果这仍然不起作用,通过显示一些没有实际名称的示例数据(因为无论如何,您所有的样本基本上都是 ID,没有什么特别的隐藏),它可以帮助其他人更好地提供解决方案。如果您不能灵活地提供此类样本数据,那么您从这个和未来得到的响应可能非常有限......

SELECT *
   FROM 
      ( select 1 as User_ID
        UNION
        SELECT a.friend_id AS User_ID
           FROM tb_friend a
           WHERE a.user_id = 1
       ) QualifiedPeople
      join tb_events e
         on QualifiedPeople.User_ID = e.User_ID

现在,如果您只想要不同的事件,请不要使用通配符来显示所有人,因为参加同一事件的多人实际上会显示每个人的事件,并且可以显示您的 8 对 6 记录......再次,没有看到样本数据,没有人能如实回答。

SELECT distinct e.id, e.title_event
   FROM ... same rest of query from above
于 2012-05-07T01:41:43.697 回答