Mysql 我可以选择上一行和下一行具有条件的具有条件的行吗?
我正在使用MYSQL,正在寻找一种方法,只选择上一行,下一行有一个名为fav_num的字段,其值为“3” 例如,我有6行和两个字段。字段为ID和fav_编号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
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) ;