迅速な調査を行いましたが、私の問題の良い解決策ではないようです。
これが取引です。
テーブルを想像してください:
type|filter1|filter2|filter3|filter4|filter5
3 |1 |0 |1 |1 |0
...
タイプ - 値の可能性: 1 または 2 または 3。フィルター 1 - 5 - ブール値。
私が必要とするソート(上から下へ):
- タイプ = 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) と入力し、filter5 = 1;
- タイプ = 1、フィルター 5 = 1;
したがって、結果の一番上には、条件番号 1 を満たす行が表示され、次に番号 2 というようになります。
それが問題の明確な説明であることを願っています。
ありがとう。
PS現在の作業ソリューションは、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
しかし、それは最適化のために泣いているようです