我有两张表section
和users
。我需要运行一个简单的查询来返回所有部分。但是,对于每个部分,在用户部分中具有多个ID的字段中可能存在对应的id
。即ids
= 2,6,8,10
以下是按ID及其分配的用户选择特定部分的示例。
Select * from section, users where sectionid = '2' and sectionid IN (`ids`);
这会返回user.ids
2
所在的ids
所有section
------------------------------------
sectionid, sectionname, Description
2 section2
4 section4
6 section6
8 section8
User
------------------------------------
userid, ids(of the section/s),
1 4,6
2 4,8
3
4 4,6,8
我的问题是我需要选择分配给一个表中每个部分的所有用户吗?
Result
-------------------
Sectionid, sectionname, usersassignedtothissection
2 section2 null (no one assigned to section2)
4 section4 1,2,4
6 section6 1
8 section8 2,4
所需结果:显示所有部分是否分配用户,并在一列中显示每个部分的用户ID / s分配,如下所示。
ajax post
答案 0 :(得分:3)
您可以使用FIND_IN_SET
到JOIN
表格使用以下解决方案:
SELECT
section.sectionid,
section.sectionname,
GROUP_CONCAT(user.userid ORDER BY user.userid) AS 'usersassignedtothissection'
FROM section
LEFT JOIN user ON FIND_IN_SET(section.sectionid, user.ids)
GROUP BY section.sectionid, section.sectionname
注意:建议不要使用列来存储多个值!您可以创建映射表以将表section
映射到表user
,如下所示:
CREATE TABLE section_user (
user_id INT,
section_id INT
)
在这种情况下,您的查询将如下:
SELECT
s.sectionid,
s.sectionname,
GROUP_CONCAT(u.userid ORDER BY u.userid) AS 'usersassignedtothissection'
FROM section s
LEFT JOIN section_user su ON s.sectionid = su.section_id
LEFT JOIN user u ON su.user_id = u.userid
GROUP BY s.sectionid, s.sectionname