根据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订单丢失
答案 0 :(得分:2)
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
如果有两个条件:
id
内的oid
是连续的(它们之间没有间隙),B
总是在A
订单{/ 1}}之前,使用它:
id
,没有加入。