Mysql 选择下一个和上一个id顺序不符合逻辑

Mysql 选择下一个和上一个id顺序不符合逻辑,mysql,select,Mysql,Select,是否可以从下表中选择下一行 Table foo Values: 312 911 128 <-- prev 389 <-- current 124 <-- next 993 213 表foo 价值观: 312 911 128如果未指定顺序,则DB引擎将根本不会对数据进行排序。因此,无论您在特定记录之后尝试选择什么,都需要进行排序。如果您没有指定顺序,则DB引擎将根本不会对数据进行排序。因此,在特定记录之后尝试选择的任何内容都需要排序。可以使用MySQL语法。文档中说它只适用于M

是否可以从下表中选择下一行

Table foo
Values:
312
911
128 <-- prev
389 <-- current
124 <-- next
993
213
表foo
价值观:
312
911

128如果未指定顺序,则DB引擎将根本不会对数据进行排序。因此,无论您在特定记录之后尝试选择什么,都需要进行排序。

如果您没有指定顺序,则DB引擎将根本不会对数据进行排序。因此,在特定记录之后尝试选择的任何内容都需要排序。

可以使用MySQL语法。文档中说它只适用于
MyISAM
引擎,不过:

“第三个处理程序…读取语法从中的表中获取一行 “自然行顺序”

自然行顺序是MyISAM中存储行的顺序 表数据文件

假设下表:

CREATE TABLE `a` (
  `a_col` int(10) unsigned NOT NULL DEFAULT '0',
  `d_col` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `c_col` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`a_col`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
使用以下数据:

mysql> select * from a;
+-------+---------------------+-----------+
| a_col | d_col               | c_col     |
+-------+---------------------+-----------+
|     0 | 2013-11-20 15:25:55 | nürnberg  |
|     3 | 2013-11-11 00:00:00 | NULL      |
|     4 | 2013-11-21 12:32:56 | adsf      |
|    11 | 2013-11-21 12:33:04 | adsf      |
|    17 | 2013-11-21 12:32:46 | adsf      |
|    30 | 2013-11-21 12:33:11 | adsf      |
|   861 | 2013-11-21 12:33:01 | adsf      |
+-------+---------------------+-----------+
现在,您可以打开一个处理程序:

mysql> handler a open;
Query OK, 0 rows affected (0.00 sec)

读取任意行:

mysql> handler a read `PRIMARY` = (4);
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|     4 | 2013-11-21 12:32:56 | adsf  |
+-------+---------------------+-------+
1 row in set (0.00 sec)

按自然顺序读取之前读取的行旁边的行:

mysql> handler a read `PRIMARY` NEXT;
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|    11 | 2013-11-21 12:33:04 | adsf  |
+-------+---------------------+-------+
1 row in set (0.02 sec)

等等:

mysql> handler a read `PRIMARY` NEXT;
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|    17 | 2013-11-21 12:32:46 | adsf  |
+-------+---------------------+-------+
1 row in set (0.00 sec)

可以使用MySQL语法。文档中说它只适用于
MyISAM
引擎,不过:

“第三个处理程序…读取语法从中的表中获取一行 “自然行顺序”

自然行顺序是MyISAM中存储行的顺序 表数据文件

假设下表:

CREATE TABLE `a` (
  `a_col` int(10) unsigned NOT NULL DEFAULT '0',
  `d_col` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `c_col` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`a_col`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
使用以下数据:

mysql> select * from a;
+-------+---------------------+-----------+
| a_col | d_col               | c_col     |
+-------+---------------------+-----------+
|     0 | 2013-11-20 15:25:55 | nürnberg  |
|     3 | 2013-11-11 00:00:00 | NULL      |
|     4 | 2013-11-21 12:32:56 | adsf      |
|    11 | 2013-11-21 12:33:04 | adsf      |
|    17 | 2013-11-21 12:32:46 | adsf      |
|    30 | 2013-11-21 12:33:11 | adsf      |
|   861 | 2013-11-21 12:33:01 | adsf      |
+-------+---------------------+-----------+
现在,您可以打开一个处理程序:

mysql> handler a open;
Query OK, 0 rows affected (0.00 sec)

读取任意行:

mysql> handler a read `PRIMARY` = (4);
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|     4 | 2013-11-21 12:32:56 | adsf  |
+-------+---------------------+-------+
1 row in set (0.00 sec)

按自然顺序读取之前读取的行旁边的行:

mysql> handler a read `PRIMARY` NEXT;
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|    11 | 2013-11-21 12:33:04 | adsf  |
+-------+---------------------+-------+
1 row in set (0.02 sec)

等等:

mysql> handler a read `PRIMARY` NEXT;
+-------+---------------------+-------+
| a_col | d_col               | c_col |
+-------+---------------------+-------+
|    17 | 2013-11-21 12:32:46 | adsf  |
+-------+---------------------+-------+
1 row in set (0.00 sec)

没有“自然”秩序?比如先来等?(基本上是插入的顺序)不,每次选择的顺序可能不同。@jurgen这不对,每次选择同一个选择(不包括order by)的顺序不会不同。@MarcellFülöp:可以,但不必如此。你不能依赖于一个特定的秩序,没有“自然”秩序?比如先来等?(基本上是插入的顺序)不,每次选择的顺序可能不同。@jurgen这不对,每次选择同一个选择(不包括order by)的顺序不会不同。@MarcellFülöp:可以,但不必如此。你不能依赖一个特定的订单。