MySQL 具有限制和偏移的默认排序顺序 - 忽略了一些项目 - 为什么?
MySQL Default Sort Order with Limits and Offsets - Some Items Ignored - Why?
我 运行 遇到一个非常有趣的 MySQL 查询问题,该问题似乎仅在未指定排序顺序且查询中使用限制和偏移量时适用。当未指定排序顺序时,结果重复了我的 table 中的一项。根据排序的工作方式,这似乎没有意义。
我创建了一个简单的数据库并且能够将我 运行 的原始问题重现为:
结构:
数据:
使用 SQL 查询时,例如:
SELECT SQL_CALC_FOUND_ROWS * FROM test WHERE test_customer = '1' LIMIT 4 OFFSET 4
当我调整偏移量时,值 "yes" 没有出现在最后一次偏移量查询中。元素 13 重复。这似乎没有意义。
有人知道为什么会这样吗?
有关发生的事情的更详细说明,请参阅显示默认结果与升序结果的完整示例:
https://eamster.tk/mysql_debug_test/mysql_debug.php
感谢任何帮助。我只是想了解发生了什么......现在,我将通过指定 ORDER BY
子句来解决这个问题。
SQL表和结果集(没有ORDER BY)
表示无序集。排序是任意的,反复无常。它可以从查询执行到查询执行。
这个查询:
SELECT SQL_CALC_FOUND_ROWS *
FROM test
WHERE test_customer = '1'
LIMIT 4 OFFSET 4;
Returns 任意 4 行给客户。 OFFSET
没有任何意义。
如果您想要特定顺序的数据,请使用 ORDER BY
。否则,数据的顺序可以随查询执行的不同而变化。没有"default ordering".
所以:
SELECT SQL_CALC_FOUND_ROWS *
FROM test
WHERE test_customer = 1
ORDER BY testid
LIMIT 4 OFFSET 4;
请注意,我从 =
中删除了单引号。该值为整数,因此请使用数值常量。
我 运行 遇到一个非常有趣的 MySQL 查询问题,该问题似乎仅在未指定排序顺序且查询中使用限制和偏移量时适用。当未指定排序顺序时,结果重复了我的 table 中的一项。根据排序的工作方式,这似乎没有意义。
我创建了一个简单的数据库并且能够将我 运行 的原始问题重现为:
结构:
数据:
使用 SQL 查询时,例如:
SELECT SQL_CALC_FOUND_ROWS * FROM test WHERE test_customer = '1' LIMIT 4 OFFSET 4
当我调整偏移量时,值 "yes" 没有出现在最后一次偏移量查询中。元素 13 重复。这似乎没有意义。
有人知道为什么会这样吗?
有关发生的事情的更详细说明,请参阅显示默认结果与升序结果的完整示例:
https://eamster.tk/mysql_debug_test/mysql_debug.php
感谢任何帮助。我只是想了解发生了什么......现在,我将通过指定 ORDER BY
子句来解决这个问题。
SQL表和结果集(没有ORDER BY)
表示无序集。排序是任意的,反复无常。它可以从查询执行到查询执行。
这个查询:
SELECT SQL_CALC_FOUND_ROWS *
FROM test
WHERE test_customer = '1'
LIMIT 4 OFFSET 4;
Returns 任意 4 行给客户。 OFFSET
没有任何意义。
如果您想要特定顺序的数据,请使用 ORDER BY
。否则,数据的顺序可以随查询执行的不同而变化。没有"default ordering".
所以:
SELECT SQL_CALC_FOUND_ROWS *
FROM test
WHERE test_customer = 1
ORDER BY testid
LIMIT 4 OFFSET 4;
请注意,我从 =
中删除了单引号。该值为整数,因此请使用数值常量。