2011-08-01 2 views
0

다음과 같은 "문제"가 있습니다.쉼표가있는 문자열을 찾기 위해 작동하는 FIND_IN_SET과 비슷한 기능이 있습니까?

표 "레이블"에는 레코드 레이블이 포함됩니다. 표 "앨범"에는 앨범과 해당 앨범의 레이블이있는 필드 ("1,4,9"와 같은 형식)가 포함됩니다.

이제 앨범 이름, 출시 연도, 아티스트 등과 함께 라벨 이름을 가져오고 싶습니다. 레이블 이름은 모두 알아 냈습니다. FIND_IN_SET이 쉼표로 작동하지 않는 것 같습니다 ... 도와 주시겠습니까? 아니면 라벨 이름에 보조 검색어를 사용해야합니까?

감사합니다.

+0

이상적으로 앨범/라벨 ID를 가져와 별도의 테이블에 넣으면 결과를 쉽게 찾을 수 있습니다. –

답변

0

문제는 스키마가 잘못되었다는 것입니다. 앨범과 레이블 간의 관계를 쉼표로 구분 된 목록으로 저장하지 마십시오. 모든 열의 값은 항상 원자 (단일 값)이어야합니다.

이와 같이 다 - 대 - 다 관계를 저장하는 방법은 새로운 테이블을 사용하는 것입니다.

CREATE TABLE artist_label (artist_id int, label_id int, primary key (artist_id, label_id)); 
INSERT INTO artist_label (1, 1); 
INSERT INTO artist_label (1, 4); 
INSERT INTO artist_label (1, 9); 

이제 예술가와 레이블 정보를 동시에 검색하는 것이 쉽습니다.

SELECT 
    artist.*, 
    label.* 
FROM 
    artist 
INNER JOIN 
    artist_label 
ON 
    artist_label.artist_id = artist.id 
INNER JOIN 
    label 
ON 
    label.id = artist_label.label_id 
+0

고마워요! 좋은 대답. :) – toooft

관련 문제