我正在尝试创建一个“趋势”列表,其中显示前10篇文章。趋势列表基于最新和最多的视图。这是我当前的SQL查询的样子:
$resultSet = $db->query("SELECT * FROM Articles ORDER BY Counter DESC, dateStamp LIMIT 10");
Counter
是存储每篇文章的视图数量的列。 dateStamp
是存储每篇文章的日期时间的日期时间列。我当前的SQL适用于视图数量。它命令顶部视图最多的文章和底部视图最少的文章。
我遇到这个当前SQL的唯一问题是它不需要最近的日期。它会查找所有日期,并仅根据视图对查询进行排序。一篇文章可能是2年,但它会有更多的观点,所以它将在趋势列表中。
如何才能使查询根据最近和大多数视图对结果进行排序?
示例数据:
日期:2015年8月1日意见:20,000
日期:9/30/16浏览次数:500
日期:9/28/16浏览次数:400
日期:9/25/16浏览次数:150
日期:9/22/16浏览次数:100
日期:9/21/16浏览次数:98
日期:9/20/16浏览次数:92
日期:9/18/16浏览次数:10
日期:9/15/16浏览次数:5
日期:9/12/16浏览次数:3
从技术上讲,数据应如下所示:
日期:9/30/16浏览次数:500
日期:9/28/16浏览次数:400
日期:9/25/16浏览次数:150
日期:9/22/16浏览次数:100
日期:9/21/16浏览次数:98
日期:9/20/16浏览次数:92
日期:9/18/16浏览次数:10
日期:9/15/16浏览次数:5
日期:9/12/16浏览次数:3
日期:9/11/16浏览次数:2
它没有组织最近的日期。我需要它来组织最近的日期和最多的观点。视图部分正常工作,只是日期不是。
答案 0 :(得分:2)
这是如何获取10条最新记录:
SELECT * FROM Articles ORDER BY dateStamp DESC LIMIT 10;
这是按下降视图排序的方式:
SELECT ... ORDER BY Counter DESC;
两者相结合:
SELECT *
FROM (SELECT * FROM Articles ORDER BY dateStamp DESC LIMIT 10) TOP10
ORDER BY Counter DESC;
答案 1 :(得分:0)
我认为您需要使用where
来限制显示的日期。 order by
根据第一列对结果进行排序。如果两行的第一列具有相同的值,则它仅使用第二列。