MySQL限制查询无法获取所有数据

时间:2018-02-19 08:07:57

标签: mysql sql-order-by limit

我有一个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

enter image description here

表的内容如下:

enter image description here

我想获取两个日期之间的记录,并且在每个结果集中我想要两条记录。执行以下查询,其结果集显示在附加图像中:

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;

enter image description here

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;

enter image description here

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;

enter image description here

我们可以看到没有提取ID为3的记录。预期的结果是应该获取来自ample的所有记录。如果我使用DATE上的Order by条件执行相同的查询ORDER BY DATE ASC,我会得到所需的结果。 是在每次获取中我们得到一个新的结果集,应用了哪个顺序?

2 个答案:

答案 0 :(得分:2)

问题是&#34; LIMIT 4,2&#34;和&#34;限制2,2&#34;,这意味着你不想要所有的结果

要解释更多:

LIMIT 4,2表示从第4个开始只需要2个结果

来自MYSQL网站limit optimization

的LIMIT和ORDER优化的最佳解释

答案 1 :(得分:1)

您使用了远程查询日期,您的ID是主键。您将根据“增加日期和时间顺序”获得输出。

因此,如果没有使用限制,订单将按此顺序

Id
4
2
1
5
3

查询1的限制2 - &gt;你会得到ID's 4 and 2

查询2-的限制为2,2&gt;这里您的偏移量为2,因此它将跳过前两个结果ie.(4 and 2),它将打印ID's 1 and 5

对于查询3 - &gt;尝试限制4,1您将获得Id 3