2010-06-25 7 views
5

제공하는 서비스가있는 판매자 이름 및 필드 필드가있는 표가 있습니다. 서비스 필드는 서비스 ID 및 서비스 이름 필드가있는 다른 서비스 테이블과 관련된 쉼표로 구분 된 정수 목록입니다.mySql - 쉼표로 구분 된 값 목록을 사용하여 조인 만들기

저는이 둘을 조인하는 단일 쿼리를 만들려고합니다. 따라서 서비스 이름과 함께 상인 목록을 가질 수 있습니다. 내 솔루션 지금까지 내 초기 'foreach'루프 내에서 두 번째 루프를 할 수 있지만 각 상인 이름 5 또는 6 db 호출을 의미 할 수 있습니다.

일부 StackOverflowing (google-ing) 후 쉼표로 구분 된 필드를 사용하는 것이 최선의 방법이 아님을 확인했습니다.

누구나 가입 할 수있는 방법이 있습니까? 아니면 DB 구조가 더 잘 설정 될 수 있을지 생각하는 사람이 있습니까? 미리 많은 감사드립니다! - 열이 쉼표로 구분 한 목록 포함 할 수 없습니다

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

장기적인 해결책은 테이블을 수정하는 것입니다

답변

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

+0

@Marcus Adams이 솔루션은 지정된 경우에 완벽합니다. 모든 콤마 뒤에 공백이 필요한 경우에는 어떻게해야합니까? – Devner

6

문제에 대한 단기적인 해결책은 상인 및 서비스 테이블을 조인하는 FIND_IN_SET function을 사용하는 것입니다 참조 ID/etc 값

관련 문제