-2

我目前尝试按受欢迎程度对数据库中的行(帖子)进行排序的方式是将提交的时间戳除以帖子拥有的视图数量,然后按升序对它们进行排序。

我的桌子如下所示

ID      submitted             views

1  2013-09-03 15:14:05          1

2  2013-09-04 11:13:54          2

3  2013-09-05 18:14:13          3

4  2013-09-06 12:05:05          4

我试过了

SELECT * FROM posts ORDER BY SUM(unix_timestamp(submitted)/views) ASC LIMIT 30

但是,当我有近 40 个帖子时,它只给出 1 个结果

我也试过没有 sum 函数

SELECT * FROM posts ORDER BY unix_timestamp(submitted)/views ASC LIMIT 30

但这似乎所做的只是按视图降序显示它们的帖子,这真的很奇怪,因为我已经说过 ASC。

如果对我使用 PDO 有任何帮助。

4

3 回答 3

0
SELECT * FROM posts ORDER BY views ASC

这不工作吗?

于 2013-09-07T12:28:12.683 回答
0

我的猜测是,您想通过提交时间之间的差异对它们进行排序now(),除以视图。这粗略地衡量了每单位时间的平均观看次数,这个衡量标准对我来说很有意义:

ORDER BY (unix_timestamp(now()) - unix_timestamp(submitted)) / views ASC

这将返回查看频率最高的帖子。

于 2013-09-07T12:42:06.533 回答
0

似乎您的查询是正确的,并且它正在正确排序数据,请参阅时间戳列:

SELECT *, unix_timestamp(submitted)/views As timestamp FROM posts ORDER BY 
unix_timestamp(submitted)/views ASC LIMIT 30;

看到这个小提琴http://sqlfiddle.com/#!2/8a8f4/11

你应该改变你的逻辑。

于 2013-09-07T12:45:11.003 回答