MySQL заказ не по порядку - PullRequest
       2

MySQL заказ не по порядку

1 голос
/ 05 сентября 2010

Я получил предметы, оцененные по обоим рейтингам, и использую клавишу ORDER BY, чтобы упорядочить их по положительным значениям, но с примером таблицы:

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

Но пункт 1 действительно имеет меньшую оценку, чем другие, какя бы это исправил?

Ответы [ 3 ]

2 голосов
/ 05 сентября 2010

Вы можете сделать ORDER BY pos - neg DESC, но это будет медленно, потому что он не может использовать индекс.

Вы можете денормализовать вашу базу данных, явно сохранив значение pos - neg в таблице, чтобы вы могли индексировать ееулучшить производительность.Обычно денормализация считается плохой вещью, и ее следует избегать, но если требуется улучшение производительности, то это приемлемый подход.

2 голосов
/ 05 сентября 2010

Вы можете найти чистую оценку, вычтя 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)
0 голосов
/ 05 сентября 2010

Да, вы можете использовать математику по порядку.

ORDER BY pos-neg DESC

НО убедитесь, что pos и neg не ПОДПИСАНЫ! Потому что, когда они попытаются пойти отрицательно, вы получите самый большой результат;)

...