php - 按日期和自动递增列 (id) 排序,但按第四列 (ab) 的字母顺序对第三列 (oid) 具有相同值的行进行排序

标签 php mysql sql-order-by

根据 Quassnoi 的回答,我进行了编辑,以显示使用他的建议会发生什么,并向 OID 添加字母以显示有问题的排序。

我在 mysql 数据库中有一个表,我首先想按应将其添加到数据库的日期对其进行排序。

SELECT * FROM table ORDER BY date_placed DESC;

接下来,如果日期相同,我想通过自动递增的 ID 进行排序。所以我添加了:

SELECT * FROM table ORDER BY date_placed DESC, id DESC;

我最终得到了这样的结果:

Date_Placed |  ID  |  OID   |  AB
05/01/2012  | 1100 |  A50   |  A
05/01/2012  | 1109 |  A50   |  B
05/01/2012  | 1108 |  B40   |  A
05/01/2012  | 1107 |  B40   |  B
04/01/2012  | 1106 |  C30   |  A
04/01/2012  | 1105 |  C30   |  B

AB 字段将始终仅由 A 或 B 组成,OID 可能存在两次或为唯一值。 我现在想要的是在 OID 重复的情况下,B 位于 AB 列中的 A 之前。请注意,ID 将在一定程度上出现困惑。

Date_Placed |  ID  |  OID   |  AB
05/01/2012  | 1109 |  A50   |  B
05/01/2012  | 1110 |  A50   |  A
05/01/2012  | 1107 |  B40   |  B
05/01/2012  | 1108 |  B40   |  A
04/01/2012  | 1105 |  C30   |  B
04/01/2012  | 1106 |  C30   |  A

我更喜欢在 mysql 端执行此操作,因为我将检索相当多的行。这可能吗?如果不在 mysql 中,那么我使用 php 那么最好的方法是什么?预先感谢任何可以提供帮助的人。

Quassnoi 的回答是这样的:

Date_Placed |  ID  |  OID   |  AB
05/01/2012  | 1107 |  B40   |  B
05/01/2012  | 1108 |  B40   |  A
05/01/2012  | 1109 |  A50   |  B
05/01/2012  | 1110 |  A50   |  A
04/01/2012  | 1105 |  C30   |  B
04/01/2012  | 1106 |  C30   |  A

ID订单丢失

最佳答案

SELECT  m.*
FROM    (
        SELECT  date_placed, oid, MAX(id) AS mid
        FROM    mytable
        GROUP BY
                date_placed, oid
        ) md
JOIN    mytable m
ON      (m.date_placed, m.oid) = (md.date_placed, md.oid)
ORDER BY
        m.date_placed DESC, mid DESC, ab DESC

如果两个条件成立:

    单个oid内的
  1. id是连续的(它们之间没有间隙),并且
  2. B 按照 id 顺序始终位于 A 之前,

使用这个:

SELECT  *
FROM    mytable
ORDER BY
        date_placed DESC,
        CASE ab WHEN 'A' THEN id - 1 ELSE id END DESC,
        id

,没有连接。

关于php - 按日期和自动递增列 (id) 排序,但按第四列 (ab) 的字母顺序对第三列 (oid) 具有相同值的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10932846/

相关文章:

javascript - 显示服务器时间,包括时区偏移

mysql - sql select 使用多个 where 子句获取超过 15 天的数据

php - 如何在 Laravel 中执行此操作,子查询在哪里

mysql - 返回一周中每一天的数据(每行 7 条记录)- MySQL

SQL ORDER BY DECODE 是将数字作为字符串排序吗?

php - Laravel 6.4.1 SQLSTATE [HY000] [2002]连接被拒绝

php - Twitter API 不响应整个推文

php - Linux/Laravel - 如何共享来自不同项目(同一服务器)的上传内容并在 1 个子域上显示它们?

ruby-on-rails-3 - Rails 3 按孙子计数的订单记录

mysql - mySql的select语句