gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:51:54 24 4
gpt4 key购买 nike

根据 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   |  AB05/01/2012  | 1100 |  A50   |  A05/01/2012  | 1109 |  A50   |  B05/01/2012  | 1108 |  B40   |  A05/01/2012  | 1107 |  B40   |  B04/01/2012  | 1106 |  C30   |  A04/01/2012  | 1105 |  C30   |  B

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

Date_Placed |  ID  |  OID   |  AB05/01/2012  | 1109 |  A50   |  B05/01/2012  | 1110 |  A50   |  A05/01/2012  | 1107 |  B40   |  B05/01/2012  | 1108 |  B40   |  A04/01/2012  | 1105 |  C30   |  B04/01/2012  | 1106 |  C30   |  A

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

Quassnoi 的回答是这样的:

Date_Placed |  ID  |  OID   |  AB05/01/2012  | 1107 |  B40   |  B05/01/2012  | 1108 |  B40   |  A05/01/2012  | 1109 |  A50   |  B05/01/2012  | 1110 |  A50   |  A04/01/2012  | 1105 |  C30   |  B04/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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com