2010-06-25 90 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 /等值。