2011-12-02 5 views
-1

테이블이 있습니다 : tbl_offer (offer_name, location). 특정 쿠폰의 경우 위치 항목에 쉼표로 구분 된 둘 이상의 위치가 있습니다.MySQL 데이터를 가져 오는 중

예 :

제안 offer1의 경우, 나는 위치 열에서 Bangalore, Mumbai, Chennai 있습니다.

이제 각 위치를 개별적으로 가져 오는 쿼리를 작성하려고합니다 (특정 쿠폰에 대해 쉼표로 구분). offer1을 선택하고 Bangalore Mumbai and Chennai을 별도 레코드로 가져와야합니다.

+5

될 것, 그것을 변경 * 지금 * 당신은 필드에 쉼표로 구분 된 목록을 저장하지 않을 수 있도록. 그렇지 않으면 동일한 내용에 대한 수천 개의 결과에 대해 [search here] (http://stackoverflow.com/search?q=mysql+split+column)를 참조하십시오. – Cylindric

+0

예 .. 아이디어를 얻었습니다. 정말 고맙습니다. – bid

답변

1

@Cylindric이 데이터베이스 설계를 변경할 수 있다고 말한 것처럼!
두 개의 테이블을 만듭니다. 하나는 제안 용이고 다른 하나는 위치 용입니다.

OFFERS (id, name) 
LOCATIONS (offer_id, name) 

그래서 (예를 들어) 당신은 OFFERS에서 (1, 'offer1') 및 위치에
(1, 'Bangalore'), (1, 'Mumbai') and (1, 'Chennai') 있습니다.

귀하의 질의는 쉬울 것입니다 :

SELECT o.name, l.name FROM offers o 
INNER JOIN locations l ON o.id = l.offer_id 

는 솔직히 말해서, 당신은 위치 반복 피하기 위해 세 개의 테이블이 있어야합니다 당신은 OFFERS에서
(1, 'offer1')

OFFERS  (id, name) 
LOCATIONS (id, name) 
OFFERS_LOC (offer_id, loc_id) 

,
을 LOCATIONS의 (1, 'Bangalore'), (2, 'Mumbai') and (3, 'Chennai')
OFFERS_LOC의(1, 1), (1, 2) and (1, 3) 당신은 여전히이 응용 프로그램을 개발하는 경우

조회에

SELECT o.name, l.name FROM offers o 
INNER JOIN offers_loc ol ON o.id = ol.offer_id 
INNER JOIN locations l ON ol.loc_id = l.id 
+0

Mcrco에게 많은 제안을 해주셔서 감사합니다. – bid

관련 문제