Php 如何对mysql数据进行反向排序

Php 如何对mysql数据进行反向排序,php,mysql,Php,Mysql,我知道这是一个奇怪的标题,但我被难住了。如果我抓取20行,像这样: SELECT * FROM `articles` WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY)) ORDER BY `views` DESC LIMIT 20 然后我想把它们倒转过来,从最低的“视图”到最高的“视图”,我该怎么做呢?我不能简单地按“ASC”排序,因为这给了我错误的结果集。我想要最高的视图,然后从最低到最高进行排序。为此使用子查询。子查

我知道这是一个奇怪的标题,但我被难住了。如果我抓取20行,像这样:

SELECT * FROM `articles` WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY)) ORDER BY `views` DESC LIMIT 20

然后我想把它们倒转过来,从最低的“视图”到最高的“视图”,我该怎么做呢?我不能简单地按“ASC”排序,因为这给了我错误的结果集。我想要最高的视图,然后从最低到最高进行排序。

为此使用子查询。子查询选择正确的20行,外部查询然后根据最终条件对它们进行排序:

SELECT a.*
FROM (SELECT a.*
      FROM articles a
      WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY))
      ORDER BY views DESC
      LIMIT 20
     ) a
ORDER BY views ASC;
以虫族的想法为例:

Select * FROM (
    SELECT * FROM `articles` 
    WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY))
    ORDER BY `views` DESC 
    LIMIT 20 
) as reverse_article 
ORDER BY views ASC
我会让你加倍分类的

  • 将拾取最高值(内部选择)

  • 最低的将首先被选中

  • 然而

    您还可以通过PHP反向排序,首先获取fetchALL并将count()从count()(最大大小数组)向后运行到0(最高数组视图)

    你自己选吧这应该行

    SELECT * FROM (SELECT * FROM `articles` WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY)) ORDER BY `views` DESC LIMIT 20) t ORDER BY `views` ASC
    
    MySQL查询:

    (SELECT * FROM `articles` WHERE date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 30 DAY)) ORDER BY `views` DESC LIMIT 20) ORDER by `views` ASC;
    

    使用反向排序的嵌套查询不是我,但有一个简单的原因:您的答案与有效的mysql查询相差太远。我在mysql Workbench和PHP沙盒上进行了测试,结果正常=(不知道“怎么做”,因为我从来没有想过这是错的……编辑:
    (+)
    (+)
    实际上没有解释任何东西。根据-它应该是无效的。我很好奇这是预期的行为还是无意中支持的syntaxI不认为它是无效的,因为括号中说先执行内部的内容。你不能在
    限制之后添加过滤器。因此基于这个问题,我得到了有限的响应e未排序,然后对其进行排序。