MYSQL 分组依据拆分数组
MYSQL group by on splitted array
我有一个 table event
列 organizer
。列组织器是一个 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
我有一个 table event
列 organizer
。列组织器是一个 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.
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