【发布时间】:2013-10-29 18:57:13
【问题描述】:
我需要选择从今天开始的 40 行和 10 条日期较早的记录,按日期排序。
如果 MySQL 支持负偏移,它看起来像这样:
SELECT * FROM `mytable` WHERE `date` >= '2013-10-29' ORDER BY date LIMIT -10, 40;
不支持负偏移。我该如何解决这个问题?谢谢!!!
【问题讨论】:
我需要选择从今天开始的 40 行和 10 条日期较早的记录,按日期排序。
如果 MySQL 支持负偏移,它看起来像这样:
SELECT * FROM `mytable` WHERE `date` >= '2013-10-29' ORDER BY date LIMIT -10, 40;
不支持负偏移。我该如何解决这个问题?谢谢!!!
【问题讨论】:
使用UNION 组合两个查询:
(
SELECT *
FROM mytable
WHERE date < '2013-10-29'
ORDER BY date DESC
LIMIT 10
) UNION ALL (
SELECT *
FROM mytable
WHERE date >= '2013-10-29'
ORDER BY date
LIMIT 40
)
ORDER BY date -- if results need to be sorted
【讨论】:
UNION 不保证结果集的顺序会被保留。其次,即使是这样,UNION 左侧的结果也会按日期降序排列; UNION 右侧的结果将按日期升序排列。