分裂阵列上的MYSQL组

时间:2015-03-31 09:38:47

标签: php mysql arrays compare left-join

我有一个表event,其中包含organizer列。列组织器是一组ID-Ints(f.e。:" 10,920,527")。在第二个表(user)中,ID与名称相关联。

我需要一个MYSQL查询,它可以给我一串活动组织者的名字。 所以f.e。:

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
FROM   event 
LEFT   JOIN user ON event.organizer=user.id 
WHERE  event.id='" . $get_id . "' 
GROUP  BY event.id

现在问题在于:eventorganizer是一个数组,我希望将数组的每个值与所有user进行比较。id&#39 ; S。

我不确定这在MYSQL中是否可行,但我认为如果它可能会比在PHP中内爆它们要短得多,我需要另一个查询来获取所有用户名。

2 个答案:

答案 0 :(得分:2)

要正确解决此问题,您需要适当地重新设计数据库。

如果每个用户都可以成为不同事件的组织者,并且每个事件可以由不同的用户组织(多对多关系),则需要创建另一个(透视)表,如user_event:user_id,event_id 。因此,要进行查询,您需要通过event_id加入此表,然后通过user_id加入用户表。

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
FROM   event 
LEFT  JOIN user_event ON event.id=user_event.event_id
LEFT  JOIN user ON user_event.user_id=user.id
WHERE  event.id='" . $get_id . "' 
GROUP  BY event.id

答案 1 :(得分:1)

你需要使用mysql的FIND_IN_SET函数,看看下面的代码

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
FROM   event 
LEFT   JOIN user ON FIND_IN_SET(event.organizer, user.id) > 0
WHERE  event.id='" . $get_id . "' 
GROUP  BY event.id

希望这会对你有所帮助。