php - 如何按一列排序,然后将同一列 ID 的最新 block 推到顶部?

标签 php mysql laravel laravel-5

例如我有一张 table :

|    id    |    title    |    created_at    |

     1                            12:00           
     2                            13:00
     2                            14:00
     1                            15:00

我希望相同的 ID 号彼此靠近。在这种情况下,1 1 2 2 或 2 2 1 1 AND 按 created_at 时间对相同的 id block 进行排序,因此拥有最新 created_at 的 id block 保持在顶部,然后变为一个,与第三个 id block 相比具有最高的 created_at 等等在。我该怎么做?

orderBy('id', 'desc')->orderBy('created_at', 'desc')->get();//将 id 排序到相同的 id block ,但它不会' 将具有最新 id chunk (1 1) created_at 的 block 排在顶部。

orderBy('created_at', 'desc')->orderBy('id', 'desc')->get();//在顶部给出最新的 created_at 等等,但相同的 ID 彼此并不接近。

更大的例子:

|    id    |    title    |    created_at    |

 1                            12:00  
 2                            13:00
 1                            15:00
 2                            15:00
 1                            17:00
 3                            18:00
 1                            19:00
 3                            20:00

想要实现 foreach($table_rows as $row) { } 会给我结果:

3    20:00
3    18:00
1    19:00
1    17:00
1    15:00
1    12:00
2    15:00
2    13:00

我知道单独使用mysql很难。我如何在 php 中以最简单的方式做到这一点?

我打赌我必须先按 id 排序,然后按最新的 created_at 将每个 id 的 block 相对于彼此推送。

最佳答案

您需要获取每个id的最近日期的信息。下面是一个使用 join 和聚合的方法:

select t.*
from table t join
     (select t.id, max(created_at) as maxca
      from table t
      group by t.id
     ) tt
     on t.id = tt.id
order by tt.maxca desc, id;

剩下的只是使用最大值的order by

我不知道如何在 laravel 中表达这个,但你的问题也被标记为 mysql。

关于php - 如何按一列排序,然后将同一列 ID 的最新 block 推到顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246087/

相关文章:

php - Jquery在span中显示图像标题

php - Spreadsheet_Excel_Writer路径问题

mysql - 为所选 ID 选择每天的最大日期

mysql - 如何显示每个id列的每条记录4

php - Laravel $q->where() 日期之间

laravel - 表之间的关系不起作用

php - 将 PHP 文件中的内容输入到 HTML 文件内的 DIV 中

php - 用户何时发送 cookie?

javascript - node.js - 从 mysql 查询中调用 javascript 变量

php - 链接到带有 Vue.js 参数的路由