빠른 연구를 내 문제에 대한 좋은 해결책이 될 것 같습니다.화합물 정렬
여기에 거래가 있습니다.
type|filter1|filter2|filter3|filter4|filter5
3 |1 |0 |1 |1 |0
...
유형 - 수 값의 :
테이블을 상상할 1 또는 2 또는 3; 필터 1 - 5 - 부울 값.
제가 (위에서 아래로 하강) 필요한 분류 :
- TYPE = 3 필터 1 = 1;
- 타입 = 2, 필터 1 = 1;
- 타입 = 1, 필터 1 = 1;
- 타입 = 3, 필터 2 = 1;
- 타입 = 2, 필터 2 = 1;
- 타입 = 1, 필터 2 = 1;
- 타입 = 2, 필터 3 = 1 및 필터 4 = 1;
- 타입 = 3, 필터 3 = 1 및 필터 4 = 1;
- 타입 = 1, 필터 3 = 1 및 필터 4 = 1;
- 타입 = 2, 필터 3 = 1 및 필터 5 = 1;
- 타입 = 3, 필터 3 = 1 및 필터 5 = 1;
- 타입 = 1, 필터 3 = 1 및 필터 5 = 1;
- 유형은 (3,2), filter4 = 1;
- 타입 = 1, 필터 4 = 1;
- 유형 (3,2), 필터 5 = 1;
- 타입 = 1, 필터 5 = 1;
결과 상단에서 조건 번호 1을 충족하는 행이 표시됩니다. 다음 2 등입니다.
희망 사항은이 문제의 명확한 설명입니다.
감사합니다.
p.s. 현재 작업 솔루션은 IF의 무리를 가지고 있습니다. ...
SELECT
IF(@type = 3 and @filter1 = 1, 16
,IF(@type=2 and @filter1 = 1, 15
...
)) AS wieght, t.*
FROM table t
ORDER BY weight DESC
하지만 그건는 최적화를 위해 우는 것 같다
테이블을 정규화 할 수 있습니까? – Kermit
@PolishPrince 글쎄, 그저 추상적 인 예입니다. 실제로는 유형 필드가 FIELD() func을 사용하여 계산됩니다. 필터 1 - 5도 해당 테이블에 직접 저장되지 않습니다. 여러 (5-7) 조인이 있습니다. –