mySql - 使用逗号分隔值列表创建连接

时间:2010-06-25 18:43:15

标签: php mysql

我有一张表格,其中包含商家名称和字段的字段以及他们提供的服务。 “服务”字段是以逗号分隔的整数列表,它与另一个“服务”表相关,包含“服务ID”和“服务名称”字段。

我正在尝试创建一个连接这两个的单个查询,因此我可以列出商家列表以及服务名称。到目前为止,我的解决方案是在我的初始'foreach'循环中进行第二次循环,但这可能意味着每个商家名称有5或6个db调用。

在一些StackOverflowing(google-ing)之后,我注意到使用逗号分隔字段可能不是最好的方法。

任何人都有办法进行加入,或者有关如何更好地设置数据库结构的想法?非常感谢提前!

2 个答案:

答案 0 :(得分:6)

您的问题的短期解决方案是使用FIND_IN_SET function加入MERCHANT和SERVICES表:

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

长期解决方案是更正表 - 永远不要让列包含逗号分隔的引用ID / etc值列表。

答案 1 :(得分: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