我在Group_Concat和where过滤器中遇到了这个问题。在我的表中,我得到了与客户端链接的模块名称。我想按模块名称搜索客户端,但在组concat中我仍然希望查看客户端拥有的所有模块。目前它将显示具有这些模块的所有客户端,但它只显示该特定模块。我无法弄清楚如何使它们一起工作。
有关如何获得预期结果的任何建议吗?
这些是一些基本的表格和我尝试的结果以及我得到的结果和我真正想要的结果
Client
+--------------------+
| id | name |
+--------------------+
| 1 | client1 |
| 2 | client2 |
| 3 | client3 |
| 4 | client4 |
+--------------------+
Module
+--------------------+
| id | name |
+--------------------+
| 1 | module1 |
| 2 | module2 |
| 3 | module3 |
| 4 | module4 |
+--------------------+
Client_Module
+-------------------------+
| client_id | module_id |
+-------------------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 4 |
| 3 | 4 |
| 4 | 1 |
| 4 | 2 |
| 4 | 3 |
| 4 | 4 |
+-------------------------+
查询:
SELECT client.id, client.name, GROUP_CONCAT(module.name) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module.id
WHERE module.id IN (1,2)
结果:
Received
+--------------------------------------------------+
| id | name | modules |
+--------------------------------------------------+
| 1 | client1 | module2 |
| 2 | client2 | module1,module2 |
| 4 | client4 | module1,module2 |
+--------------------------------------------------+
Expected
+------------------------------------------------------+
| id | name | modules |
+------------------------------------------------------+
| 1 | client1 | module2,module3 |
| 2 | client2 | module1,module2,module4 |
| 4 | client4 | module1,module2,module3,module4 |
+------------------------------------------------------+
答案 0 :(得分:9)
你可以尝试这样。
SELECT client.id, client.name, GROUP_CONCAT(module.name) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module_id
group by client.id Having Find_In_Set('module1',modules)>0 or Find_In_Set('module2',modules)>0
答案 1 :(得分:2)
您正在使用client_module.module_id
将其更改为client_module.client_id
。
将group by
与group_cancat
SELECT client.id, client.name, GROUP_CONCAT(module.name) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module_id
WHERE client_module.client_id IN (1,2,4)
group by client.id, client.name
答案 2 :(得分:0)
试试
SELECT client.id, client.name, GROUP_CONCAT(module.id) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module_id
WHERE client.id IN (1,2,4)
group by client.id
您将此错误client_module.module.id
修复为client_module.module_id
你已经说过你的WHERE子句只返回1和2.
当您拥有Group_Concat