2014-02-24 2 views
0

MySQL 데이터베이스에서 일치하는 숫자를 검색하는 가장 좋은 방법을 찾아 낼 수 없습니다. MySQL에서 LIKE 또는 REGEX로 숫자 목록 일치

현재 내 쿼리는 다음과 같이 끝 :

SELECT count(*) AS total FROM `videos_test` WHERE `channels` LIKE '%$cid%'; 

$의 CID는 임의의 정수가 될 수 있고, channels는 형식입니다 "chan1, chan2, chan3, ..."(심지어 0의 수와) 채널이 설정됩니다. 일부 유효한 문자열은 다음과 같습니다

1,12,5 
5 

8,1,2 

문제는 그 $의 CID = 2, 심지어 더 많은 수의 (12,32,25의 일환으로, 어떤이 포함 된 행을 다시 얻을 때, ...). 내가 REGEX 또는 MATCH/AGAINST를 사용하여이 작업을 수행 할 수있는 것처럼 보이지만 구문에 대해 매우 혼란 스럽습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요?

+7

정규 표현식을 작성하기 전에 정규화에 대해 알아보기 전에 – Mihai

답변

1

이 아니라 해결하는 것입니다 like 사용 : MySQL의에서이 작업을 수행하는

SELECT count(*) AS total 
FROM `videos_test` 
WHERE concat(',', channels, ',') LIKE '%,$cid,%'; 

또 다른 방법은 다음과 같습니다

주석에서 언급 한 바와 같이
SELECT count(*) AS total 
FROM `videos_test` 
WHERE find_in_set($cid, channels) > 0; 

, 당신은 물건의 목록을 저장하는 것 같다 란. 이것은 나쁜 생각입니다. 비디오 및 채널 조합 당 하나의 행이있는 연관/접합 테이블을 작성해야합니다.

+0

ID 목록 대신 SQL 링크를 허용하도록 테이블을 조정하려고합니다. 그동안 작업 솔루션에 감사드립니다. – Adam

관련 문제