MySQL ORDER BY与系数?

时间:2015-10-16 07:41:01

标签: php mysql sql sql-order-by

我有一个像这样的MySQL表:

CREATE TABLE IF NOT EXISTS `story` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `rating_1_nb` int(11) NOT NULL,
  `rating_2_nb` int(11) NOT NULL,
  `rating_3_nb` int(11) NOT NULL,
  `rating_4_nb` int(11) NOT NULL,
  `rating_5_nb` int(11) NOT NULL,
  `favorite_nb` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 ;

正如您所看到的,我存储了一个明星(rating_1_nb),两个星(rating_2_nb)...评级已在特定故事上发布的次数。我想要创建的是对最佳故事和最差故事的排名,具体取决于这些故事的评分。

我想创建一个SQL查询,根据收视率自动对故事进行排序。所以我的想法是为每个评级栏设置一个系数,这样我就可以很容易地进行计算,但我不确定它在性能方面是否是一个好主意。您是否有建议要创建此特定的MySQL查询?

2 个答案:

答案 0 :(得分:0)

对我而言,这将更有意义,系数

的评级
SELECT *, ( rating_1_nb*1 + rating_2_nb*2 + rating_3_nb*3 + rating_4_nb*4 + rating_5_nb*5) as ratings FROM story order by ratings

这也是高效和有效的。

希望它也能帮到你

答案 1 :(得分:0)

两个选项:

首先:不要使用系数,只需按评级排序。类似的东西:

SELECT * FROM ratings ORDER BY rating_5_nb DESC, rating_4_nb DESC,
rating_3_nb DESC, rating_2_nb DESC, rating_1_nb DESC

这就像奥运会的评级一样,金牌首先出现,然后是银牌等等。因此,每个五星评级都比任何数量的四星级评级更重要。

第二:做一些花哨的计算。

SELECT (rating_1_nb * c_1 +  rating_2_nb * c_2 + rating_3_nb * c_3 +
rating_4_nb * 4_2 + rating_5 * c_5) AS rating FROM ratings ORDER BY rating

你不应该担心表现。您的DBMS对SQL查询进行了大量优化。只要您不需要很多连接,就不必过多考虑您的查询。