进行了快速研究,似乎对我的问题没有很好的解决方案。
这是交易。
想象表:
type|filter1|filter2|filter3|filter4|filter5
3 |1 |0 |1 |1 |0
...
type - 可能的值: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
但这似乎需要优化