2012-05-24 1 views
0

(예를 들어,에 "저", "높음"으로 설정합니다.) : 공정, 좋은, 아주 좋은, 적합, siganture 이상적인SQL 어디 워드 값의 범위와 나는 5 개 가지 값이 내 데이터베이스의 필드가

I을 모든 값을 가진 2 개의 드롭 다운이있는 coldfusion 형식을가집니다. 내가 원하는 것은 사용자가 범위를 선택할 수있게하는 것입니다. 예를 들어 dropdown1 = 공정한 dropdown2 = 매우 좋음. 그래서 어떻게 든 SQL을 생성 할 WHERE 문 :

IN 등급 ('공정', '좋은', '아주 좋은')

이이 값을 가지고 주어진 프로그래밍 할 수있는 현명한 방법을 생각할 수 이쪽이야. 아마도 배열에 넣은 다음 루프를 통해 처리 할 수도 있습니다. 나는이 도움에 대해 약간 이해를 못하게 될 것이다.

+5

DB 디자인이 잘못되었습니다. :-) 숫자 값이어야합니다 (예 : "fair"= 0, "signature ideal"= 4). 그러면 쿼리는 선택한 항목의 인덱스를 기반으로 한 단순한 BETWEEN 문입니다. 또한 사용자가 낮은 값만 선택하고 두 번째 콤보 상자 (드롭 다운 목록)에 더 높은 값만 표시되도록 선택해야합니다. 이렇게하면 조건이 반대로되지 않도록 할 수 있습니다 (예 : 낮음 = "낮음" 이상적인 ", 높은 ="공정한 "). –

+0

그리고 거의 모든 상황에서 불량 디자인을 해결하고 해결하는 것이 장기적으로 나쁜 디자인 주위를 코딩하는 것보다 낫습니다. 따라서 잘못된 길로 나아갈 수 있습니다. –

+0

@Ken - 당신은 내 마음을 읽었습니다 :) – Leigh

답변

3

다른 언급과 같이 효율성과 데이터 무결성 측면에서 재 설계가 궁극적으로 더 효과적인 행동 방식입니다. 당신 절대적으로이 구조를 변경할 수없는 경우에는, 가능한 해결 방법은 각각의 숫자 평가 값과 함께, 허용 등급 설명의 조회 테이블을 만드는 것입니다 :

GradeID | GradeText  | Rating 
1  | Fair    | 0 
2  | Good    | 1 
3  | Very Good  | 2 
4  | Ideal   | 3 
5  | Signature Ideal | 4 

다음에서 선택 목록을 채울 조회 테이블에 대한 쿼리 ORDER BY Rating ASC으로 지정하고 등급 값을 목록 값으로 사용하십시오. 그런 다음 작업 페이지에서 선택한 값을 사용하여 범위별로 필터링하십시오. (분명히 선택된 범위가 유효한지 확인하십시오.)

SELECT t.ColumnName1, t.ColumnName2 
    FROM SomeTable t INNER JOIN YourLookupTable lt ON lt.Grade = t.GradeText 
    WHERE lt.Rating BETWEEN <cfqueryparam value="#form.dropdown1#" cfsqltype="cf_sql_integer"> 
      AND <cfqueryparam value="#form.dropdown2#" cfsqltype="cf_sql_integer"> 

다시 말해서 구조 조정을 권장합니다. 그러나 이것이 실제로 옵션이 아닌 경우 위의 내용이 작동해야합니다.

+0

와우는 훌륭하게 보입니다. 조금만 시도해 볼 기회가 없지만 효과가 있는지 알려줍니다. 정말 고마워. –

+0

오늘 밤에 그것을 시험해 보았다 - 꿈처럼 작동한다. 당신의 도움을 주셔서 감사합니다. –

+0

기꺼이 도와 드리겠습니다. – Leigh