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