2010-09-05 9 views
1

j'ai obtenu des éléments notés par les deux évaluations, et utiliser une ORDER BY clé pour les commander en positif, mais avec une table exemple:pour MySQL de ne pas la commande

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

Mais le point 1 est vraiment moins note que la les autres, comment pourrais-je résoudre ce problème?

Répondre

2

Vous pouvez faire ORDER BY pos - neg DESC mais ce sera lent car il ne peut pas utiliser un index.

Vous pouvez dénormaliser votre base de données en stockant explicitement la valeur de pos - neg dans le tableau afin de pouvoir l'indexer pour améliorer les performances. Habituellement, la dénormalisation est considérée comme une mauvaise chose et doit être évitée, mais si l'amélioration des performances est nécessaire, il s'agit d'une approche acceptable.

+0

+1 pour souligner les performances comme seule raison valable d'utiliser la dénormalisation comme stratégie. (J'ai rediffusé mon commentaire car il était auparavant mal formulé.) – BoltClock

2

Vous pouvez trouver le score net en soustrayant neg de pos, puis ordonner par ce score net. Calculez, puis donnez-lui un alias, nous l'appellerons 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

Oui, vous pouvez utiliser les maths dans l'ordre.

ORDER BY pos-neg DESC

MAIS assurez-vous que POS et NEX ne sont PAS NON SIGNES! Parce que quand ils essaient de devenir négatifs, vous obtiendrez le résultat le plus élevé de tous les temps;)

Questions connexes