select * from XXX  order by id  limit ($id-2),($id+3);

解决方案 »

  1.   

    (select id from tmp where id < 5 order by id desc limit 2)
    union all
    (select id from tmp where id > 5 order by id limit 3)
    order by id;
      

  2.   

    mysql> select id from tmp;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  4 |
    |  5 |
    |  6 |
    |  7 |
    |  8 |
    |  9 |
    +----+
    9 rows in set (0.00 sec)mysql> (select id from tmp where id < 5 order by id desc limit 2)
        -> union all
        -> (select id from tmp where id > 5 order by id limit 3)
        -> order by id;
    +----+
    | id |
    +----+
    |  3 |
    |  4 |
    |  6 |
    |  7 |
    |  8 |
    +----+
    5 rows in set (0.00 sec)
      

  3.   

    表的union操作最好不要做吧
    select * from XXX  order by id  limit 3,8;
      

  4.   

    select * from XXX where id!=5 order by id  limit 3,8;
      

  5.   

    楼主的意思中“某ID前后5条记录的ID”是指按ID大小获取前后5条记录的吗?如果是:
    如果能保证id是连续的,觉得linfirst的方法效率更好。不然只能用loveflea的方法才能保
    证数据的正确性!如果不是:
    办不到