我有一个这样的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查询,您有什么建议吗?
发布于 2015-10-16 15:48:17
对我来说,这将更有意义,评级与系数
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这也将是高效和有效的。
希望对你也有帮助
发布于 2015-10-16 15:54:07
有两个选项:
第一:不要使用系数,只需按评级排序。类似于:
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查询进行了大量优化。只要你不需要大量的连接,你就不需要过多地考虑你的查询。
https://stackoverflow.com/questions/33165030
复制相似问题