Php 如何按热门/热门职位订购
我有很多帖子:Php 如何按热门/热门职位订购,php,mysql,sql,sql-order-by,Php,Mysql,Sql,Sql Order By,我有很多帖子: post_id(int(7)) user_id(int(7)) post_txt(text) post_time(varchar(30)) likes_count(int(10)) (发布时间如“5-4-2016 17:41”所示) 我想按“热门帖子”订购,例如“喜欢次数/发布时间” 我怎么做 我现在就是这样做的: $que_post=mysql_query("select * from user_post order by post_id desc"); 另外,我知道这
post_id(int(7)) user_id(int(7)) post_txt(text) post_time(varchar(30)) likes_count(int(10))
(发布时间如“5-4-2016 17:41”所示)
我想按“热门帖子”订购,例如“喜欢次数/发布时间”
我怎么做
我现在就是这样做的:
$que_post=mysql_query("select * from user_post order by post_id desc");
另外,我知道这不是你通常储蓄的方式,但我这样做是有目的的
编辑示例数据:
97||25||Hello world||8-4-2016 14:19||19
我想使用的算法是time/likes。我知道它的算法很糟糕,但我只想了解基本知识。
我想知道您是否知道这方面的好算法您应该将
post\u time
字段的类型更改为DATETIME
(阅读)。
您的所有行都必须通过一些脚本转换为格式YYYY-MM-DD HH:MM:SS
。当你这样做的时候,一切都会成功
您的问题出现的原因是按字母表作为文本排序。例如:2016年1月1日,因为文本小于1999年1月31日。假设您可以将post_时间列转换为使用日期类型,则需要查找它与现在之间的秒数,例如
Order By like_count / (unix_timestamp(now()) - unix_timestamp(post_time)) Desc;
如果更改列类型不是一个选项,您可以使用str_to_date函数动态转换它,但这可能是一个相当缓慢的操作。提供:(1)示例数据;(2) 预期结果;(3)你对“热门帖子”使用的规则。你所说的“喜欢次数/发帖时间”是指喜欢次数除以发帖时间吗?如果是这样的话,这似乎是一个糟糕的算法,因为这意味着更新的内容将不那么热门,而不是更热门。不要使用
mysql.*
它已被删除,不再工作,请使用PDO
或mysqli
。@Tom你说它已被删除是什么意思?好的,因此,只要你承认你的查询实际上会做与你想要的相反的事情,首先要做的就是按照@Andrewus的建议,把你的post\u time
转换成你可以实际进行数学运算的东西。我已经构建了sql,但我会改变它。让我们假设它的数据时间,我现在怎么做?您可以添加字段new\u post\u time
,并使用STR\u TO\u DATE('8-4-2016 14:19','%m-%d-%Y%H:%I')进行更新,以将日期转换为正确的格式。