Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 依赖于IF语句的排序算法_Php_Mysql_Algorithm_Sorting - Fatal编程技术网

Php 依赖于IF语句的排序算法

Php 依赖于IF语句的排序算法,php,mysql,algorithm,sorting,Php,Mysql,Algorithm,Sorting,我的表格中有一个项目列表,其中包括投票向上和投票向下以及其他字段。现在我想根据这两个字段的函数“受欢迎程度”来订购商品。问题是流行度的算法取决于投票数的值 例如,如果投票大于5: popularity= (votes_up/votes_down)*20 如果投票数大于50: popularity= (votes_up/votes_down)*15 (我只是用这个来解释……实际的算法是不同的) 现在我该怎么做,因为通常我会在我的查询中这样做: ORDER BY (votes_up/votes_

我的表格中有一个项目列表,其中包括
投票向上
投票向下
以及其他字段。现在我想根据这两个字段的函数“受欢迎程度”来订购商品。问题是流行度的算法取决于
投票数的值

例如,如果
投票
大于5:

popularity= (votes_up/votes_down)*20
如果投票数大于50:

popularity= (votes_up/votes_down)*15
(我只是用这个来解释……实际的算法是不同的)

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

ORDER BY (votes_up/votes_down)*20)
但我现在不能这样做,因为排序依据之后的内容取决于投票的值。我能做到这一点的唯一方法是:

if(votes_up >5){
    p = (votes_up/votes_down)*20;
} else if(votes_up > 50){
    p = (votes_up/votes_down)*15;
}
然后,在我的查询中,我可以使用p
ORDER


当然这不是有效的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

您从未说明如何处理投票,您应该按相反的顺序排列if-s-如果投票数大于50,它也将大于5,因此您永远不会输入
,否则如果
。这只是我使用的一个示例。。实际的算法是不同的。。但这不是问题所在。。问题是如何在查询表中的值之前实际使用它们。。。我甚至不知道这怎么可能。。但是许多著名的网站使用的排序算法依赖于表中的值。你是说通过查询获取所有项目,然后使用php对它们进行排序吗?这就是你所说的申请吗?问题是,如果我在桌子上有成百上千的东西,那就太贵了。因为通常你一次只能查询几个项目。。比如说。。以投票方式订购(上限)15@user1981248实际上,我更新了我的答案,因为我重新阅读了您的问题,并意识到您可能需要在逐行的基础上应用计算,而不是在整个返回的数据集上应用计算(在这种情况下,仅按
投票数向上/投票数向下排序就足够了)。谢谢。。你是对的,我认为最好的方法是在表中添加一个字段,每当有人投票赞成或反对时,该值就会根据投票赞成或反对的值而改变。再次感谢你,伙计。干杯@user1981248这与所问的问题并不相关,但您的算法对我来说似乎有问题。首先,您可能会遇到一个被零除的问题。第二,我不明白为什么一个有10张赞成票和1张反对票的项目会比一个有10000000张赞成票和1000000张反对票的项目更“受欢迎”,但这就是你建议的排序所产生的结果。就像我在问题中所说的。。我只是用它来解释我的问题。。。但我想用的算法是reddit的。。这将在本文中与其他流行网站使用的其他算法一起进行解释