很长一段时间以来,我一直试图弄清楚如何制作Hottest Posts
我想要实现的目标:ORDER BY MOST UPVOTED IN LESS TIME
例如我有4个帖子:
ID UPVOTES(Total) UPVOTES(Weekly) DATE
1 50 50 01.09.2017
2 421 6 25.07.2017
3 71 50 13.08.2017
4 111 37 15.08.2017
它需要像1 -> 3 -> 4 -> 2
我的目标是获得UPVOTES(每周) - >我不知道怎么算 它。我刚刚在这里做了,以便更好地解释我想要实现的目标。
我有2个数据库表fun_posts
和fun_post_upvotes
我试图像这样实现它,但它不起作用,它只是按id排序或由upvotes命令
$stmt = $this->conn->prepare=("SELECT * , (SELECT COUNT(*) FROM
fun_post_upvotes WHERE image_id=fun_posts.id GROUP BY image_id) FROM fun_posts
ORDER BY fun_posts.id DESC, fun_posts.upvotes DESC");
答案 0 :(得分:-1)
这是其中的一部分。
SELECT fun_posts_upvotes.image_ID, COUNT(image_ID) as 'Upvotes' FROM fun_posts_upvotes GROUP BY fun_posts_upvotes.image_ID ORDER BY Upvotes DESC;
试试吧,添加日期部分。 ;-)你可以再次询问你是否尝试了一些:P
答案 1 :(得分:-1)
如果我正确理解了问题,您应该可以很容易地将以下问题应用到您的问题中:
CREATE TABLE `tb1` (
`id` int(11) NOT NULL,
`Name` varchar(50) NOT NULL,
`up` int(11) NOT NULL,
`Down` int(11) NOT NULL,
`Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SELECT `Name`, (`tb1`.`up`/ DATEDIFF(NOW(),`tb1`.`Date` )) as `heat`
FROM `tb1`
ORDER BY (`tb1`.`up`/ DATEDIFF(`tb1`.`Date`, NOW())) ASC
这应该说明我的观点
答案 2 :(得分:-2)
我想添加到您的查询中:
ORDER BY UPVOTES(Weekly) DESC
可以解决您的问题。