我有一个带有列organizer
的表event
。列组织者是ID Ints的数组(例如:"10920527")。在第二个表(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中内爆它们要短得多,在PHP中我需要另一个查询来获取所有用户名。
为了正确地解决这个问题,您需要适当地重新设计数据库。
如果每个用户可以是不同事件的组织者,并且每个事件可以由不同的用户组织(多对多关系),则需要创建另一个(透视)表,如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
您需要使用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
希望这对你有帮助。