两列无法排序

时间:2016-09-30 19:33:18

标签: mysql sql

我正在尝试创建一个“趋势”列表,其中显示前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

它没有组织最近的日期。我需要它来组织最近的日期和最多的观点。视图部分正常工作,只是日期不是。

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根据第一列对结果进行排序。如果两行的第一列具有相同的值,则它仅使用第二列。