如何读取数据库某条记录的前后两条记录?这个简单吧?

很常见的一个场景:
假设数据库有个文章表, 里面有3条记录: id=1, title=a1; id=2, title=a2; id=3, title=a3
当我读取id=2的文章显示时, 我需要在左下角显示上一篇文章的标题也就是a1, 在右下角显示下一篇文章的标题a2
那么有什么比较好的办法能在去到id=2的记录时, 同时取到它前后的2条相关记录呢?

我现在用最笨的办法, 通过3次sql取到这3个值:
select * from article where id = 2;
select * from article where id < 2 order by id asc limit 1;
select * from article where id > 2 order by id desc limit 1;

请问还有什么更好的办法吗?
问题补充

抛出异常的爱 写道
select * from article where id > 1 limit 3;

这个...不能精确查找啊...比如我现在要显示id=253的文章...它的前一个id是245, 后一个id为278...因为中间的id可能是文章被删掉了...这样怎么取啊...有什么好的办法吗?

[quote="by5739"][quote="抛出异常的爱"]select * from article where id > 1 limit 3; [/quote]
这个...不能精确查找啊...比如我现在要显示id=253的文章...它的前一个id是245, 后一个id为278...因为中间的id可能是文章被删掉了...这样怎么取啊...有什么好的办法吗?[/quote]
select * from article where id > (select max(id) from article where id < 2 ) limit 3;

select * from article where id > 1 limit 3;

呵呵,那你得在数据库中加一个流水号的字段,来标识文章的顺序,通过流水号字段就可以很容易查出它的前一篇文章和后一篇文章了。

select * from article order by abs(id-$id) limit 3
abs函数应该没有,反正找个求绝对值的函数代替就是了。