2016-06-30 2 views
0

배열에 ID가 가득 찼으며 모든 ID가 외래 키입니다. 나는 나의 테이블의 예를 든다. 지금은 T1 태그 등이있는 모든 상점 이름을 선택해야SQL에서 배열의 다중 외래 키를 가질 수 있습니까?

st_id store_name  tags 
st1  store1   ["t1","t2","t3"] 
st2  store2   ["t1","t4"] 
st3  store3   ["t3","t5"] 

태그 테이블

tag_id tag_name 
t1  tag1 
t2  tag2 
t3  tag3 
t4  tag4 
t5  tag5 

같은 :

나는 이런 내 DB에 저장 테이블이 :

t1 : st1, st2
t2 : st1
t3 : st1, st3

어떻게 배열의 내부에 다수의 외부 키를 선택할 수 있습니다? 모든 해답을 가져 주셔서 감사합니다.

+1

이 때문에 쉼표로 구분 된 값을 열에 저장하는 것은 좋지 않습니다. – e4c5

+0

나는 e4c5에 동의합니다. 그럴 일이 없습니다. – PyNoob

+0

나쁜 습관.왜 태그 이름과 각 태그가 속한'상점 ID '를 가진 별도의 테이블을 만들지 마십시오 ... 거기에서 당신의 길을 가십시오 .. – andre3wap

답변

0

일부 RDBMS는 배열에 대한 지원이 제한되어 있지만, MySQL은 실제로 그 중 하나가 아닙니다.

store table 
st_id store_name 
st1  store1 
st2  store2 
st3  store3 

store_tag table 
st_id tag_id 
st1  t1 
st1  t2 
st1  t3 
st2  t1 
st2  t4 
st3  t3 
st3  t5 


tag table 
tag_id tag_name 
t1  tag1 
t2  tag2 
t3  tag3 
t4  tag4 
t5  tag5 

당신은 그들의 태그 모든 상점의 목록은이 작업을 수행 할 수 있습니다 :

이 데이터에 대한 표준화 된 디자인은 다 대다 디자인과 같이 접합 테이블을 사용하는 것

SELECT s.st_id, GROUP_CONCAT(t.tag_name) AS tags 
FROM store s 
JOIN store_tag st 
    ON st.st_id = s.st_id 
JOIN tag t 
    ON t.tag_id = st.tag_id 
GROUP BY st_id; 

또는이 특정 태그 이름을 가진 모든 상점의 목록을 원하는 경우 :

SELECT s.st_id 
FROM store s 
JOIN store_tag st 
    ON st.st_id = s.st_id 
JOIN tag t 
    ON t.tag_id = st.tag_id 
WHERE t.tag_name = 'tag1'; 
0

을 이에 대한 일반적인 접근 방식은 다른 사람들이 언급했듯이 피벗 테이블을 사용하는 것입니다. 새 레이아웃은 다음과 같이 될 것이다 :

스토어 테이블 :

st_id store_name  
st1  store1   
st2  store2   
st3  store3   

태그 테이블 :

tag_id tag_name 
t1  tag1 
t2  tag2 
t3  tag3 
t4  tag4 
t5  tag5 

tag_store (태그 - 투 - 저장 피벗 테이블) :

tag_id std_id 
std1  t1 
std1  t2 
std1  t3 
std2  t1 
std2  t4 
std3  t3 
std3  t5 

이렇게하면 다음과 같은 쿼리가 생성됩니다 SELECT store_name, tag_name FROM store JOIN tag_store ON tag_store.std_id = store.id JOIN tag ON tag.tag_id = tag_store.tag_id;

당신이 MySQL을 사용하는 경우, GROUP_CONCAT 사용하여 STORE_NAME 당 하나의 목록에있는 모든 태그를 얻을 수 : tag_store.std_id = 스토어에서 tag_store 가입 스토어에서 SELECT STORE_NAME, GROUP_CONCAT (TAG_NAME의 SEPARATOR ',') 을 .id JOIN 태그 ON tag.tag_id = tag_store.tag_id GROUP BY store_name;

관련 문제