gpt4 book ai didi

php - 依赖于 IF 语句的排序算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:44 27 4
gpt4 key购买 nike

我的表中有一个项目列表,其中包含字段 votes_upvotes_down 以及其他字段。现在我想根据这两个字段的功能根据受欢迎程度订购商品。问题在于受欢迎程度的算法取决于 votes_up 的值。

例如,如果 votes_up 大于 5:

popularity= (votes_up/votes_down)*20

如果 votes_up 大于 50:

popularity= (votes_up/votes_down)*15

(我只是用这个来解释..实际的算法是不同的)。

现在我该怎么做,因为通常我会在我的查询中做这样的事情:

ORDER BY (votes_up/votes_down)*20)

但我现在不能这样做,因为 ORDER BY 之后的内容取决于 votes_up 的值。我能做到这一点的唯一方法是:

if(votes_up >5){
p = (votes_up/votes_down)*20;
} else if(votes_up > 50){
p = (votes_up/votes_down)*15;
}

然后在我的查询中我可以有 ORDER BY p

当然这不是有效的 PHP,但我只想解释我的问题。我希望你明白我想要达到的目标。

最佳答案

您可以使用案例陈述简单地计算您的受欢迎程度,然后根据它进行排序。它可能看起来像这样:

SELECT ((votes_up/votes_down)*(CASE WHEN votes_up > 50 THEN 15 WHEN votes_up > 5 THEN 20 ELSE ? END CASE)) as popularity, [ANY OTHER FIELDS]
FROM table
ORDER BY popularity DESC

你从来没有说明如何处理 votes_up <= 5 所以我只是放了一个 ? 对于那种情况,你可以填空。

但是请注意,这将无法为此类排序使用索引,因此如果您希望返回大量行,您的查询可能会执行得很慢。

您可能需要考虑在表中添加一个字段来存储计算出的流行度值(该值将由应用程序在投票赞成或反对时更新)。然后,您可以索引该字段并获得更优化的排序。

关于php - 依赖于 IF 语句的排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com