做了快速研究,似乎沒有很好的解決我的問題。複合排序
這裏是交易。
想象表:
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