我得到了两个评级评分的项目,并使用ORDER BY键按顺序排序,但是有一个示例表:
//(item)-(pos)-(neg):
item 1 - 50 - 200
item 2 - 24 - 0
item 3 - 15 - 12
但是第1项的评分确实低于其他项目,我该如何解决?
答案 0 :(得分:2)
您可以通过从neg
中减去pos
来找到净得分,然后按该净得分排序。计算它,然后给它一个别名,我们称之为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)
答案 1 :(得分:2)
你可以ORDER BY pos - neg DESC
但它会很慢,因为它不能使用索引。
您可以通过在表中显式存储pos - neg
的值来对数据库进行非规范化,以便您可以对其进行索引以提高性能。通常,非规范化被认为是一件坏事,应该避免,但如果它需要改进的性能,那么这是一种可接受的方法。
答案 2 :(得分:0)
是的,你可以按顺序使用数学。
ORDER BY pos-neg DESC
但要确保pos和neg不是UNSIGNED!因为当他们试图消极时你会得到最大的结果;)