MYSQL 分组依据拆分数组

MYSQL group by on splitted array

我有一个 table eventorganizer。列组织器是一个 ID-Ints 数组 (f.e.: "10,920,527")。在一秒钟内 table (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

所以现在的问题是:event.organizer 是一个数组,我想将数组的每个值与所有 user.id'秒。

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

你需要使用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

希望对您有所帮助。

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

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

加入用户 table
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