我有一个像这样的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查询?
答案 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查询进行了大量优化。只要您不需要很多连接,就不必过多考虑您的查询。