2010-06-25 51 views
5

我有一个表格,其中包含商家姓名和字段以及他们提供的服务的字段。服务字段是与另一个服务表相关的整数的逗号分隔列表,带有服务标识和服务名称字段。mySql - 使用逗号分隔值列表创建连接

我试图创建一个连接这两个的查询,所以我可以有一个商家列表以及服务名称。到目前为止,我的解决方案是在我的初始'foreach'循环中完成第二个循环,但这可能意味着每个商家名称需要5或6分贝的调用。

经过一些StackOverflow-ing(谷歌),我注意到使用逗号分隔的字段可能不是最好的方式。

任何人都有办法做联接,或想如何建立更好的数据库结构?提前谢谢了!

回答

5
Merchant 
MerchantId Name 
      1 Adams Consulting 

Merchant_Services 
MerchantId Service 
     1 SEO 
     1 Brand Consulting 

实际上,你可以得到一个逗号分开回:

SELECT m.*, GROUP_CONCAT(ms.Service) AS Services 
FROM Merchant m 
LEFT JOIN Merchant_Serivces ms 
ON ms.MerchantId = m.MerchantId 
GROUP BY m.MerchantId 
ORDER BY m.Name, ms.Service 

结果:

MerchantID Name    Services 
---------- ---------------- -------------------- 
     1 Adams Consulting Brand Consulting,SEO 
+0

这是完美的。谢谢!我已经得到了第三张仅包含服务列表的表,但这应该是一个相当简单的连接。 – TerryMatula 2010-06-25 19:16:40

+0

@Marcus Adams该解决方案适用于指定的案例。如果我们在每个逗号后都需要空格会怎么样? – Devner 2016-02-11 11:38:41

6

短期内解决你的问题是使用FIND_IN_SET function加盟商家和服务表:

SELECT * 
    FROM MERCHANT m 
    JOIN SERVICES s ON FIND_IN_SET(s.service_id, m.services) > 0 

长期的解决办法是纠正你的表 - 决不允许列包含逗号分隔的列表参考ID /等值。