2010-09-05 15 views
1

我得到了雙方評級評級項目,並使用ORDER BY鍵通過積極命令他們,但是有一個示例表:MySQL的ORDER BY不是訂購

//(item)-(pos)-(neg): 
item 1 - 50 - 200 
item 2 - 24 - 0 
item 3 - 15 - 12 

但第1項是真正的評價比少別人,我會如何解決這個問題?

回答

2

你可以做ORDER BY pos - neg DESC,但將是緩慢的,因爲它不能使用索引。

您可以通過在表中明確存儲pos - neg的值來規範化數據庫,以便您可以對其進行索引以提高性能。通常非規範化被認爲是一件壞事,應該避免,但如果它需要改進的性能,那麼這是一個可接受的方法。

+0

+1強調性能是使用非規範化作爲策略的唯一正當理由。 (我轉發了我的評論,因爲之前措辭不佳。) – BoltClock 2010-09-06 04:01:30

2

您可以通過從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) 
0

是的,你可以按順序使用數學。

ORDER BY pos-neg DESC

但是確保pos和neg不是UNSIGNED!因爲當他們試圖消極時,你會以有史以來最大的結果結束;)