首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带系数的MySQL排序依据?

带系数的MySQL排序依据?
EN

Stack Overflow用户
提问于 2015-10-16 15:41:01
回答 2查看 62关注 0票数 0

我有一个这样的MySQL表:

代码语言:javascript
复制
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查询,您有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-10-16 15:48:17

对我来说,这将更有意义,评级与系数

代码语言:javascript
复制
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

这也将是高效和有效的。

希望对你也有帮助

票数 0
EN

Stack Overflow用户

发布于 2015-10-16 15:54:07

有两个选项:

第一:不要使用系数,只需按评级排序。类似于:

代码语言:javascript
复制
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

这就像奥运会的评分一样,金牌排在第一位,银牌排在后面,以此类推。因此,每一个五星级评级都比任何数量的四星级评级更重要。

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

代码语言:javascript
复制
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查询进行了大量优化。只要你不需要大量的连接,你就不需要过多地考虑你的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33165030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档