Mysql 分组依据、分组条件、条件以及如何选择

Mysql 分组依据、分组条件、条件以及如何选择,mysql,Mysql,我有三张桌子 objects id, field1, field2, ... groups id, title, color group_ref oid, gid 因此,每个对象都可以在n个组中 我想显示一个对象列表,该列表的一个字段是对象所在的组。下面是我的想法: SELECT o.id, CONCAT_WS("||", GROUP_CONCAT(gx.gid separator "|"), GROUP_CONCAT(gr.title, "#", gr.color se

我有三张桌子

objects     id, field1, field2, ...
groups      id, title, color
group_ref   oid, gid
因此,每个对象都可以在n个组中

我想显示一个对象列表,该列表的一个字段是对象所在的组。下面是我的想法:

SELECT o.id,
CONCAT_WS("||", GROUP_CONCAT(gx.gid separator "|"), GROUP_CONCAT(gr.title, "#", gr.color separator "|")) AS groups 
FROM objects AS o 
LEFT JOIN group_ref AS gx ON o.id = gx.oid 
LEFT JOIN groups AS gr ON gx.gid = gr.id 
WHERE 1 
GROUP BY o.id
这实际上是可行的,我可以从(连接的)组字段中创建所需的接口

问题是:如何选择仅在一个特定组中的对象(例如gid=4)

这只能得到部分结果:

WHERE gr.id = 4

非常感谢您的帮助!(也许还有一种更为优雅的方式来制作concat thingy)

这行吗

WHERE gr.id = 4
GROUP BY o.id
HAVING COUNT(*) = 1

这应仅显示一个组中的对象:

SELECT o.id,
CONCAT_WS("||", GROUP_CONCAT(gx.gid separator "|"),
    GROUP_CONCAT(gr.title, "#", gr.color separator "|")) AS groups 
FROM objects AS o 
LEFT JOIN group_ref AS gx ON o.id = gx.oid 
LEFT JOIN groups AS gr ON gx.gid = gr.id
GROUP BY o.id
HAVING COUNT(DISTINCT gx.gid) = 1

如果我理解正确,您希望获得组4中的所有对象以及这些对象所在的所有组。您希望在group_ref表上加入两次,一次用于筛选(常规加入),一次用于获取相关组(左加入)


“不起作用”不是一个看起来很有趣的解释,但它让我了解了所有只在一(1)组中的对象。我需要获取特定组中的所有对象(例如gid 4)。
SELECT o.id,
CONCAT_WS("||", GROUP_CONCAT(gx.gid separator "|"),
    GROUP_CONCAT(gr.title, "#", gr.color separator "|")) AS groups 
FROM objects AS o 
LEFT JOIN group_ref AS gx ON o.id = gx.oid 
LEFT JOIN groups AS gr ON gx.gid = gr.id
GROUP BY o.id
HAVING COUNT(DISTINCT gx.gid) = 1
SELECT o.id,
CONCAT_WS("||", GROUP_CONCAT(gx.gid separator "|"),
GROUP_CONCAT(gr.title, "#", gr.color separator "|")) AS groups 
FROM objects AS o 
JOIN group_ref AS gfilter ON o.id = gfilter.oid AND gfilter.gid=4
LEFT JOIN group_ref AS gx ON o.id = gx.oid 
LEFT JOIN groups AS gr ON gx.gid = gr.id 
WHERE 1 
GROUP BY o.id