假设我有这三个表:users、categories 和 users_categories(多对多)。
我正在尝试获取所有用户及其类别,所以它会是这样的:
SELECT users.*, GROUP_CONCAT(DISTINCT categories.name separator '/') clist
FROM users
LEFT JOIN users_categories ON users_categories.user = users.id
LEFT JOIN categories ON categories.id = users_categories.category
很简单。现在,困难的部分是我想显示属于特定类别的所有用户,但仍然在 GROUP_CONCAT 中保持相同的类别列表。执行以下查询仅按预期显示特定类别中的用户,但会截断他所属的其余类别:
SELECT users.*, GROUP_CONCAT(DISTINCT categories.name separator '/') clist
FROM users
LEFT JOIN users_categories ON users_categories.user = users.id
LEFT JOIN categories ON categories.id = users_categories.category
INNER JOIN categories cmust ON cmust.id = categories.id AND cmust.name = 'categoryhere'
我将如何更改最后一个查询?谢谢。
编辑:只有列名的示例数据:
用户表:
id, name:
1, myname
2, anothername
3, hisname
类别表:
id, name
1, music
2, art
3, sports
USERS_CATEGORIES 表:
user, category
1,1
1,2
2,2
3,1
3,3
3,2
没有搜索类别的所需查询结果(如我的第一个查询):
users.id,users.name,clist
1,'myname','music/art'
2,'anothername','art'
3,'hisname','music/sports/art'
具有搜索类别的所需查询结果。假设只有“音乐”类别中的用户。users.id,users.name,clist
1,'myname','music/art'
3,'hisname','music/sports/art'
最后一个是我想要完成的。我基本上只是想删除不在指定类别中的用户,并且仍然保留他们所属的其余类别。