MySQL从到中选择id并排除起始id和结束id

MySQL从到中选择id并排除起始id和结束id,mysql,Mysql,我有一张桌子: +----+-------------------+----------+ | id | channel | channels | +----+-------------------+----------+ | m2 | AA-AA | 4 | | 1 | TT_1 | 4 | | 2 | TT_2 | 4 | | 11 | TT_3

我有一张桌子:

+----+-------------------+----------+
| id | channel           | channels |
+----+-------------------+----------+
| m2 | AA-AA             |        4 |
| 1  | TT_1              |        4 |
| 2  | TT_2              |        4 |
| 11 | TT_3              |        4 |
| 12 | TT_4              |        4 |
| m4 | BB-BB             |        4 |
| m3 | CC-CC             |        4 |
| m5 | DD-DD             |        4 |
| 17 | FF-FF             |        4 |
| m1 | EE-EE             |        4 |
+----+-------------------+----------+
在本例中,我需要查询m2到下一个起始id m(不包括m2和m4)的结果……因此,我的ajax将其发送到mysql:

http://server_ip/get_bouquets/m2
需要取得成果:

1
2
11
12
17
如果客户端发送到服务器:

http://server_ip/get_bouquets/m5
它需要取得成果:

1
2
11
12
17
我试着: 查询显示在这里


谢谢。

如果您确实有办法保证事件的顺序,并且我在这里使用自动增量字段进行模拟,那么您可以发现第一个和下一个序列号并对其进行测试

DROP table if exists t;
create table t
(sno int auto_increment primary key, id varchar(2),channel varchar(20));
insert into t (id,channel) values
('m2'  , 'AA-AA'),             
( '1'  , 'TT_1' ) ,            
( '2'  , 'TT_2' ) ,                    
( '11' , 'TT_3' ),                      
( '12' , 'TT_4' ),                     
( 'm4' , 'BB-BB'),                     
( 'm3' , 'CC-CC'),                     
( 'm5' , 'DD-DD'),                     
( '17' , 'FF-FF'),                     
( 'm1' , 'EE-EE');

select id 
from t
where sno > (select sno from t where id = 'm2') and sno < 
(select sno from t t1 where left(id,1) = 'm' and sno > (select sno from t where id = 'm2') limit 1);

+------+
| id   |
+------+
| 1    |
| 2    |
| 11   |
| 12   |
+------+
4 rows in set (0.00 sec)

如果您确实有一些方法来保证事件的顺序,并且我在这里使用自动增量字段进行模拟,那么您可以发现第一个和下一个序列号并测试它们

DROP table if exists t;
create table t
(sno int auto_increment primary key, id varchar(2),channel varchar(20));
insert into t (id,channel) values
('m2'  , 'AA-AA'),             
( '1'  , 'TT_1' ) ,            
( '2'  , 'TT_2' ) ,                    
( '11' , 'TT_3' ),                      
( '12' , 'TT_4' ),                     
( 'm4' , 'BB-BB'),                     
( 'm3' , 'CC-CC'),                     
( 'm5' , 'DD-DD'),                     
( '17' , 'FF-FF'),                     
( 'm1' , 'EE-EE');

select id 
from t
where sno > (select sno from t where id = 'm2') and sno < 
(select sno from t t1 where left(id,1) = 'm' and sno > (select sno from t where id = 'm2') limit 1);

+------+
| id   |
+------+
| 1    |
| 2    |
| 11   |
| 12   |
+------+
4 rows in set (0.00 sec)

关系数据库中的行表示无序集。我认为你需要重新思考你的模式-您无法从发布的数据中判断事件的顺序。sql数据不以任何特定的顺序存储这是返回表上方的简单查询,完整查询很复杂且很长,因此在这个问题中不需要它…所以我在上面发布了需要返回结果的简单表…关系数据库中的行表示无序集。我认为你需要重新思考你的模式-您无法从发布的数据中判断事件的顺序。sql数据不按任何特定顺序存储这是返回上表的简单查询,完整查询很复杂,而且很长,所以在这个问题中它不是必需的…所以我发布了上面的简单表,我需要返回结果…这是一个很好的答案!保证顺序的一种方法是为自动生成的列提供一个基于其他列值的值。我认为这将是操作中最困难的部分。非常智能、非常有用和快速的查询..谢谢,但我需要它,没有自动增量id在您的示例中它是自动增量…您能不能在没有自动增量id的情况下执行它?不。除非您有某种方法以某种方式保证事件的顺序,否则这是不可能的,这可能是您的源数据,也可能是查询的结果,该查询生成了问号行中的样本数据。这是一个很好的答案!保证顺序的一种方法是为自动生成的列提供一个基于其他列值的值。我认为这将是操作中最困难的部分。非常智能、非常有用和快速的查询..谢谢,但我需要它,没有自动增量id在您的示例中它是自动增量…您能不能在没有自动增量id的情况下执行它?不。除非您有某种方法以某种方式保证事件的顺序,否则这是不可能的,这可能是在您的源数据中,也可能是查询的结果,该查询生成问号行中的样本数据。