假设此表按日期排序
id | date | customer
3 | 2009-10-01| Frank
1 | 2010-10-11| Bob
4 | 2010-11-01| Mitchel
2 | 2010-11-02| Jim
我想进行查询,以便知道ID = 4,结果行是
$row[0]['id'] == 1 //previous
$row[1]['id'] == 4 //most recent/current
$row[2]['id'] == 2 //next
仅限mysql的解决方案最好,但是如果有一个优雅的php解决方案也会很酷。
答案 0 :(得分:4)
由于表格按date
列排序,您可以运行以下查询来获取它:
上一行:
select * from tablename where `date` < (select `date` from tablename where id=4) order by `date` desc limit 1
对于当前行:
select * from tablename where id=4
下一行:
select * from tablename where `date` > (select `date` from tablename where id=4) order by `date` asc limit 1
输出:这三个查询返回结果(逐个),如下所示:
id date customer
1 2010-10-11 Bob
4 2010-11-01 Mitchel
2 2010-11-02 Jim
答案 1 :(得分:1)
由于您按日期排序,但基于您希望id上相邻行的行,您将不得不进行2次查询。第一个确定您选择的ID的日期,第二个确定相邻的行。
第1步 - 获取日期
Select date
FROM yourtable
WHERE id = 4
第2步 - 获取所有行
SELECT *
FROM yourtable
WHERE date IN ( (select MAX( date ) from yourtable where date < $datefromquery1)
, $datefromquery1
, (select MIN( date ) from yourtable where date > $datefromquery1)
)
答案 2 :(得分:0)
LIMIT函数可以使用两个参数,即返回的偏移量和行数。在您的情况下,您希望偏移量(具有所需行之前的日期的行数) - 1,或者在这种情况下2 - 1 = 1,并且行数为3。所以你想要的SQL是
SELECT * FROM customers ORDER BY date ASC LIMIT 1,3;
,数字“1”将是查询的结果
SELECT COUNT(*)-1 FROM customers WHERE date > "2010-11-01";
我不相信MySQL会让你使用子选择或函数值作为LIMIT的参数,所以你必须使用PHP存储它并以这种方式构造下一个查询。