Mysql 我可以选择上一行和下一行具有条件的具有条件的行吗?

Mysql 我可以选择上一行和下一行具有条件的具有条件的行吗?,mysql,codeigniter,Mysql,Codeigniter,我正在使用MYSQL,正在寻找一种方法,只选择上一行,下一行有一个名为fav_num的字段,其值为“3” 例如,我有6行和两个字段。字段为ID和fav_编号 ID| fav_num 1 | 3 2 | 2 3 | 3 4 | 7 5 | 2 6 | 9 我想找到一种方法,从上一行和下一行fav_num为3的表中返回ID。 然后,此查询将返回ID 2 如果我的问题听起来令人困惑,我道歉 我认为这可以奏效 SELECT id FROM tab t WHERE t.id BETW

我正在使用MYSQL,正在寻找一种方法,只选择上一行,下一行有一个名为fav_num的字段,其值为“3”

例如,我有6行和两个字段。字段为ID和fav_编号

 ID| fav_num
 1 | 3
 2 | 2
 3 | 3
 4 | 7
 5 | 2
 6 | 9
我想找到一种方法,从上一行和下一行fav_num为3的表中返回ID。 然后,此查询将返回ID 2


如果我的问题听起来令人困惑,我道歉

我认为这可以奏效

SELECT id
  FROM tab t
 WHERE t.id BETWEEN
       (SELECT MAX(id) FROM tab tp WHERE tp.id < t.id AND tp.fav_num = 3)
   AND (SELECT MIN(id) FROM tab tn WHERE tn.id > t.id AND tn.fav_num = 3)
请试试这个:

SELECT a.id FROM test1 a WHERE 
3=(SELECT fav_num FROM test1 WHERE id = (SELECT MAX(id) FROM test1 WHERE id <a.id)) AND 
3=(SELECT fav_num FROM test1 WHERE id = (SELECT MIN(id) FROM test1 WHERE id >a.id)) ;


SELECT a.id FROM test1 a WHERE 
EXISTS (SELECT 1 FROM test1 WHERE id = (SELECT MAX(id) FROM test1 WHERE     id <a.id) AND fav_num=3) AND 
EXISTS (SELECT 1 FROM test1 WHERE id = (SELECT MIN(id) FROM test1 WHERE  id >a.id)  AND fav_num=3) ;

我不确定性能。

您是否特别希望只返回ID=2的数据,或者这是获取数据库中fav_num=2的所有条目的一般规则?ID是否始终连续无间隙?
SELECT t1.*
FROM t1
INNER JOIN (SELECT 
    @d1:=0+@d2 d1,
    @d2:=0+@d3 d2,
    @d3:=fav_num d3,
    @previd:=@id prevID,
    @id:=id 
FROM (
  SELECT *
  FROM t1 
  ORDER BY id) t
) filter
ON filter.d1 = 3
   AND filter.d3 = 3
   AND t1.id = filter.prevID
;
SELECT a.id FROM test1 a WHERE 
3=(SELECT fav_num FROM test1 WHERE id = (SELECT MAX(id) FROM test1 WHERE id <a.id)) AND 
3=(SELECT fav_num FROM test1 WHERE id = (SELECT MIN(id) FROM test1 WHERE id >a.id)) ;


SELECT a.id FROM test1 a WHERE 
EXISTS (SELECT 1 FROM test1 WHERE id = (SELECT MAX(id) FROM test1 WHERE     id <a.id) AND fav_num=3) AND 
EXISTS (SELECT 1 FROM test1 WHERE id = (SELECT MIN(id) FROM test1 WHERE  id >a.id)  AND fav_num=3) ;