我得到了雙方評級評級項目,並使用ORDER BY鍵通過積極命令他們,但是有一個示例表:MySQL的ORDER BY不是訂購
//(item)-(pos)-(neg):
item 1 - 50 - 200
item 2 - 24 - 0
item 3 - 15 - 12
但第1項是真正的評價比少別人,我會如何解決這個問題?
我得到了雙方評級評級項目,並使用ORDER BY鍵通過積極命令他們,但是有一個示例表:MySQL的ORDER BY不是訂購
//(item)-(pos)-(neg):
item 1 - 50 - 200
item 2 - 24 - 0
item 3 - 15 - 12
但第1項是真正的評價比少別人,我會如何解決這個問題?
你可以做ORDER BY pos - neg DESC
,但將是緩慢的,因爲它不能使用索引。
您可以通過在表中明確存儲pos - neg
的值來規範化數據庫,以便您可以對其進行索引以提高性能。通常非規範化被認爲是一件壞事,應該避免,但如果它需要改進的性能,那麼這是一個可接受的方法。
您可以通過從pos
減去neg
找到淨分數,然後按該淨分數排序。計算它,然後給它一個別名,我們把它叫做net
:
mysql> SELECT item, pos, neg, (pos - neg) AS net
-> FROM table
-> ORDER BY net DESC;
+------+-----+-----+------+
| item | pos | neg | net |
+------+-----+-----+------+
| 2 | 24 | 0 | 24 |
| 3 | 15 | 12 | 3 |
| 1 | 50 | 200 | -150 |
+------+-----+-----+------+
3 rows in set (0.00 sec)
是的,你可以按順序使用數學。
ORDER BY pos-neg DESC
但是確保pos和neg不是UNSIGNED!因爲當他們試圖消極時,你會以有史以來最大的結果結束;)
+1強調性能是使用非規範化作爲策略的唯一正當理由。 (我轉發了我的評論,因爲之前措辭不佳。) – BoltClock 2010-09-06 04:01:30