숫자 문자열에 와일드 카드가있는 MySQL 쿼리
문제
숫자 문자열 (예 : '1,2,3,4,5')이 포함 된 MySQL 테이블을 쿼리하려고합니다.
'9,10' '9%'라면 '11'을 염두에두고 '1'이 있지만 '11'을 염두에 두지 않는지 검색하려면 어떻게해야합니까?
결정된!
(field like '10' OR field like '%,10,%' OR field like '%,10' OR field like '10,%')
해결책
기능이 필요합니다 find_in_set. BTW, '9%'가 작동해야합니다. 열에 지정한 값이 포함되어 있으면 쿼리가 확실합니까?
SELECT * FROM table WHERE field LIKE '9%'?
다른 팁
find_in_set 함수를 시도 할 수 있습니다
select find_in_set('1','1,2,3,11,12')
표준 SQL도 할 수 있습니다.
...
WHERE
',' + SetValue + ',' LIKE '%,1,%'
AND ',' + SetValue + ',' NOT LIKE '%,11,%'
이 표현식은 인덱스를 사용할 수 없으므로 테이블 크기가 상승함에 따라 성능이 빠르게 저하됩니다.
더 나은 성능을 위해 테이블을 올바르게 정규화해야합니다.
SetId SetValue
1 1
1 2
1 3
1 4
1 5
대신에
SetId SetValue
1 '1,2,3,4,5'
제휴하지 않습니다 StackOverflow