2013-07-22 7 views
5

데이터베이스에 "태그"라는 필드가있는 테이블이 있습니다 (예 : iOS, Android, Java, JavaScript 등.이 표의 모든 항목을 선택하고 싶습니다. 일부 태그와 일치하는 항목이 있습니다. 예 :MySQL "like"(거짓 긍정)

id | 이름 | 태그

- | ------- | -----

1 | 이름 1 | iOS, Android

2 | 이름 2 | 자바 스크립트, CSS

3 | 이름 3 | 이제 HTML, 자바

, 나는 태그 '자바'내가이 할 (ID = 3 만 것)가있는 항목 만하려는 경우 : 당신이 상상할으로,

SELECT * FROM posts WHERE tags LIKE '%Java%'; 

을하지만를 , 두 번째 (JavaScript) 항목과 세 번째 (Java) 항목을 반환합니다.

세 번째 만 반환하려면 어떻게해야합니까? 당신은 또한 like하여이 작업을 수행 할 수 있습니다, MySQL과 다른 데이터베이스에서

SELECT * 
FROM posts 
WHERE find_in_set('Java', tags) > 0; 

,하지만 당신은 모든 주위에 구분 기호를 넣어해야합니다 :

+2

'SELECT * FROM posts '% Java'와 같은 태그들 : –

+2

many-to-many 관계를위한 구글 – zerkms

+0

대신 관계 테이블을 사용하고'LIKE' 절을 현명하게 만들어야합니다. – Raptor

답변

14

MySQL의에서 최선의 해결책은 find_in_set()입니다

SELECT * 
FROM posts 
WHERE concat(',', tags, ',') like '%,Java,%'; 

구분 된 태그는 유사한 태그와의 혼동을 방지합니다 (쉼표가 포함되지 않은 혼동).

+0

'%, Java, %';'와 같이 'LIKE'% Java % ';와'concat (',', tags, ',')의 차이점을 정확히 알고 싶습니다. 고맙습니다. –

+2

@ChristianMark. . . 첫 번째는''Javascript ''와 일치합니다. 두 번째는하지 않습니다. –

관련 문제