Mysql 使用group concat显示相关结果

Mysql 使用group concat显示相关结果,mysql,Mysql,我正在尝试获取feed X对应的人的所有事件,并返回参加该事件的其他人。。。在单个查询中 events (TABLE) - id int (10) - name varchar (20) events_people (TABLE) - id int (10) - event_id int (10) - person_id int (10) feed (TABLE) - id int (10) - feed_id varchar (20) - person_id int

我正在尝试获取feed X对应的人的所有事件,并返回参加该事件的其他人。。。在单个查询中

 events (TABLE)
 - id int (10)
 - name varchar (20)

 events_people (TABLE)
 - id int (10)
 - event_id int (10)
 - person_id int (10)

 feed (TABLE)
 - id int (10)
 - feed_id varchar (20)
 - person_id int (10)

 people (TABLE)
 - id int (10)
 - first_name varchar (20)
通过这个简单的查询,我可以做到这一点:

SELECT events.id AS event_id, GROUP_CONCAT(DISTINCT(people.first_name)) AS attending
FROM events
LEFT JOIN events_people ON events.id = events_people.event_id
LEFT JOIN people ON events_people.person_id = people.id
LEFT JOIN feed ON events_people.person_id = feed.person_id
GROUP BY events.id
但只要我在('SHFDskdf')中添加一个类似于
的WHERE feed.feed_id的条件,它就会过滤所有与feed X无关的用户,从而中断组连接

我肯定这不是火箭科学,但在花了几个小时在这上面之后,我确实觉得是的


sqlfiddle:

只需将条件移动到
on
子句:

SELECT events.id AS event_id, GROUP_CONCAT(DISTINCT(people.first_name)) AS attending
FROM events LEFT JOIN
     events_people
     ON events.id = events_people.event_id LEFT JOIN
     people
     ON events_people.person_id = people.id LEFT JOIN
     feed
     ON events_people.person_id = feed.person_id AND feed.feed_id IN ('SHFDskdf')
GROUP BY events.id;
编辑:

问题是过滤器对
人没有影响。first\u name
。您可以使用
case
语句解决此问题:

SELECT e.id AS event_id,
       GROUP_CONCAT(DISTINCT case when f.person_id is not null then p.first_name end) AS attending
FROM events e LEFT JOIN
     events_people ep
     ON e.id = ep.event_id LEFT JOIN
     people p
     ON ep.person_id = p.id LEFT JOIN
     feed f
     ON ep.person_id = f.person_id AND f.feed_id IN ('SHFDskdf')
GROUP BY e.id;
这应该是你想要的

编辑二:

现在我想我知道你想要什么了:

SELECT e.id AS event_id,
       GROUP_CONCAT(DISTINCT p.first_name) AS attending
FROM events e LEFT JOIN
     events_people ep
     ON e.id = ep.event_id LEFT JOIN
     people p
     ON ep.person_id = p.id LEFT JOIN
     feed f
     ON ep.person_id = f.person_id 
GROUP BY e.id
HAVING SUM(f.feed_id IN ('SHFDskdf')) > 0;

嗨,戈登,谢谢你的回答。它关闭了,但工作不正常。所有事件都将显示,即使用户(或提要)与事件无关:对于事件3,用户tim不是事件的一部分,但事件仍在返回。嗨,Gordon,不幸的是,这还不完全存在,现在只返回提要用户。也许我用了完全错误的方式来处理这个问题。。。?总而言之,我正在尝试获取用户X将要访问的所有事件id,对于这些事件,还将返回其他用户的列表。。。也许在一个查询中是不可能的,但看起来我们非常接近@蒂姆。哦,你想要一个有
子句的
。是的,这正是我需要的。非常感谢您的时间和努力:)