MySQL选择HOTTEST(最短时间内最多投票)

时间:2017-09-01 11:34:41

标签: mysql

很长一段时间以来,我一直试图弄清楚如何制作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_postsfun_post_upvotes 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");

3 个答案:

答案 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)

如果我正确理解了问题,您应该可以很容易地将以下问题应用到您的问题中:

MYSQL Order By Sum of Columns

Order By Sum of Two Fields

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

可以解决您的问题。