2012-11-27 2 views
0

내 데이터베이스에서 내 소프트웨어의 listview와 일치하는 필드를 쿼리하려고합니다. 물론 여러 선택이 가능합니다. 이 예제의 경우 listview의 옵션은 "opt1", "opt2", "opt3", "opt4"입니다. 다음과 같이 레코드가 데이터베이스에 저장됩니다Sql 해시 태그 분할 문자가 포함 된 필드를 쿼리

1 개 목록보기 옵션의 경우 : "OPT1"여러 옵션 적용
"OPT1 # Opt3"- 또는 "Opt3 # Opt4"- 또는 "OPT1 # Opt4 # Opt3을 "- 기타. 너는 표류를 얻는다.

  • 특정 옵션의 모든 발생 횟수를 계산하려면 어떻게해야합니까?
  • 1 개의 특정 옵션의 발생 횟수를 계산하려면 어떻게해야합니까?

매개 변수를 호출하는 경우 @ListViewSelection?

선택 개수 ...? 나는 때문에 # 분할 문자의 사전

+0

아야가 붙어있어. 멋진 (끔찍한) 다중 가치 열의 세계에 오신 것을 환영합니다. 이점은 다음과 같습니다. 인덱스를 올바르게 사용할 수 없거나 복잡한 쿼리 또는 복잡한 쿼리 필요, 열 및 종속성을 업데이트하는 끔찍한 시간. 원래의 디자이너에게 '스핀들, 폴드, 컷팅'하여 '보상'한 다음, 이것을 정규화하십시오 ('Option' 테이블이 필요합니다). –

답변

0
select count(*) from tablename where listview like '%Opt1%' 

주입 공격을 피하기 위해 바운드 매개 변수로 패턴을 통과해야합니다에서

감사합니다,

select count(*) from tablename where listview like ? 
+0

안녕하세요, 고마워,하지만 그것은 그렇게 간단하지 않은 것 같습니다 .. 내가 Opt2로 Opt1의 발생을 계산하고 싶다고 말해봐? (이론적으로) – wouter

+1

@wouter - 가능한 옵션의 무한한 금액이 있습니다. 백킹 RDBMS가 Regex와 같은 것을 허용하지 않는 한, 이렇게하는 두 가지 방법이 있습니다 : 1) 태그를 개별 행으로 (임시) 테이블/CTE 구성 , '카운트'가 다른 테이블 인 것처럼 (일부는이 카테고리에 속할 수있는 다른 기능을 가짐). 2) 필요에 따라 AND 및 OR을 사용하여 _each_ 옵션에 LIKE 절을 사용하십시오. –

+0

덕분에 첫 번째 옵션은 내가 추측하는 길입니다.하지만 더 쉬운 방법이 되길 바랬습니다 ;-) – wouter

관련 문제