做了快速研究,似乎没有很好的解决我的问题。复合排序
这里是交易。
想象表:
type|filter1|filter2|filter3|filter4|filter5
3 |1 |0 |1 |1 |0
...
型 - 可能值:1或2或3; 过滤器1 - 5 - 布尔值;
排序我需要(从顶部到底部降序):
- 类型= 3,过滤器1 = 1;
- type = 2,filter1 = 1;
- type = 1,filter1 = 1;
- type = 3,filter2 = 1;
- type = 2,filter2 = 1;
- type = 1,filter2 = 1;
- type = 2,filter3 = 1,filter4 = 1;
- type = 3,filter3 = 1,filter4 = 1;
- type = 1,filter3 = 1,filter4 = 1;
- type = 2,filter3 = 1和filter5 = 1;
- type = 3,filter3 = 1,filter5 = 1;
- type = 1,filter3 = 1,filter5 = 1;
- 键入(3,2),filter4 = 1;
- type = 1,filter4 = 1;
- 键入(3,2),filter5 = 1;
- type = 1,filter5 = 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 2013-03-21 20:49:30
@波利斯王子,那只是一个抽象的例子。实际上,类型字段的计算方法是使用FIELD()func,过滤器1到5也不直接存储在该表中。多个(5-7)联接是女仆。 – 2013-03-23 20:57:59