按MySQL列两列

时间:2011-06-22 22:54:48

标签: php mysql

我正在我的应用中实现一个热门功能,我将从数据库中选择最受欢迎的帖子。问题是我需要在大多数喜欢和大多数评论方面获得最受欢迎。我刚试过:

SELECT * FROM db ORDER BY `likesCount`,`commentsCount` DESC LIMIT $from," . ($to-$from)

但是,这将显示numberOfLikes方面的上升值。我怎样才能测量numberOfLikes和numberOfComments并选择最受欢迎的?

3 个答案:

答案 0 :(得分:3)

您可以指定是否要为每个搜索字段按升序或降序排序。

SELECT * FROM `db` ORDER BY `likesCount` DESC, `commentsCount` DESC

话虽如此,您将无法同时选择最喜欢和最多评论的。你必须想出一个公式来解决这个问题。例如,下面的示例找到喜欢和评论数量之间给定“id”的最大值:

SELECT * FROM `db` GROUP BY `id` ORDER BY GREATEST(`likesCount`, `commentsCount`) DESC

另一种选择是将它们加在一起:

SELECT * FROM `db` ORDER BY `likesCount` + `commentsCount` DESC

答案 1 :(得分:1)

您不想按喜欢和评论的总数订购吗?在受欢迎时,其中一个比另一个重吗?

你可以这样做:

SELECT *, (`likesCount` + `commentsCount`) as popularity FROM db ORDER BY popularity DESC ...

正如下面建议的mistercruffles,你可以添加一个乘数来使一个因子的重量大于另一个。只需使用(X * likesCount + Y * commentsCount)更改(likesCount + commentsCount),其中X是喜欢的因素,Y是评论。对于X = 2和Y = 1,这意味着喜欢比评论重要两倍,但我相信你已经明白了。

答案 2 :(得分:-1)

如果你想减肥而不是评论,你可以使用:

SELECT * FROM `db` ORDER BY (3*`likesCount` + 2*`commentsCount`) DESC

在3:2的比例中,重量比评价更重要,即强度增加50%。我不确定你是否想要这个或者更愿意选择两个计数中较高的一个来排名,但是想要在确定两个中的较高者之前加权。如果后者是您正在寻找的,那么这应该可以解决问题:

SELECT * FROM `db` ORDER BY greatest(3*`likesCount`, 2*`commentsCount`) DESC