簡體   English   中英

mySql - 使用逗號分隔值列表創建連接

[英]mySql - creating a join using a list of comma separated values

我有一張桌子,上面有商家名字和字段,里面有他們提供的服務。 “服務”字段是以逗號分隔的整數列表,它與另一個“服務”表相關,並帶有“服務ID”和“服務名稱”字段。

我正在嘗試創建一個連接這兩個的單個查詢,因此我可以列出商家列表以及服務名稱。 到目前為止,我的解決方案是在我的初始'foreach'循環中進行第二次循環,但這可能意味着每個商家名稱有5或6個db調用。

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

任何人都有辦法進行連接,或者想如何更好地設置數據庫結構? 提前謝謝了!

您的問題的短期解決方案是使用FIND_IN_SET函數來加入MERCHANT和SERVICES表:

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

長期解決方案是更正表 - 永遠不要允許列包含逗號分隔的引用ID / etc值列表。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM