我有一个 MySQL MyISAM 表,其结构如下。
CREATE TABLE `VIEW_LOG_TRIGGER_TEMP` (
`ID` mediumint(9) NOT NULL AUTO_INCREMENT,
`VIEWER` int(10) unsigned NOT NULL DEFAULT '0',
`VIEWED` int(10) unsigned NOT NULL DEFAULT '0',
`DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`SEEN` char(1) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `VIEWED` (`VIEWED`,`VIEWER`),
KEY `VIEWER` (`VIEWER`),
KEY `DATE` (`DATE`)
) ENGINE=MyISAM
表格内容如下:
我想获取两个日期之间的记录,并且在每个结果集中我想要两条记录。执行以下查询,其结果集如附图所示:
SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >= '2018-02-11 00:00:00' AND DATE < '2018-02-12 00:00:00' LIMIT 2;
SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >= '2018-02-11 00:00:00' AND DATE < '2018-02-12 00:00:00' LIMIT 2,2;
SELECT * FROM test.VIEW_LOG_TRIGGER_TEMP WHERE DATE >= '2018-02-11 00:00:00' AND DATE < '2018-02-12 00:00:00' LIMIT 4,2;
正如我们所见,ID 为 3 的记录未被提取。预期的结果是应该获取 ample 中的所有记录。如果我在 DATE
上使用 Order by 条件执行与 ORDER BY DATE ASC
相同的查询,我会得到所需的结果。
是不是在每次抓取中我们都会得到一个新的结果集,其上应用了顺序?
最佳答案
问题是“LIMIT 4,2”和“LIMIT 2,2”,这意味着你不想要所有的结果
更多解释:
LIMIT 4,2 表示从第 4 个开始只需要 2 个结果
以及来自MYSQL网站的LIMIT和ORDER优化的最佳解释limit optimization
关于MySQL 限制查询无法获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861796/