从自定义排序和过滤的表中获取上一个和下一个ID

时间:2016-04-26 12:08:47

标签: php mysql zend-framework

在我的PHP / mysql应用程序中,用户可以从数据库中筛选和排序记录。可以为每个列分别设置过滤器,并且可以为每个列DESC / ASC设置顺序。他得到一张桌子,他可以点击一个记录的详细信息,详细信息是上一个和下一个按钮,他将下一个/上一个记录与他在桌面设置的过滤器和顺序相关联。

当按列排序表时,是否有任何方法可以获取下一个和上一个记录的id,其中可以是双重值?我尝试过这样的事情:

select * from foo where column = (select min(column) from foo where column > 4)

但是,这对于前一列值与当前列值相同的记录不起作用。

因为一张桌子可以有几百万条记录,所以我不能只选择所有记录并遍历整个表格。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了你的问题,这个的东西可能会有所帮助:

  1. 首先,您可以像这样编写SELECT查询:

    is_permutation
  2. 这里要点是获取每一行的订单号(将出现在SET @row_num=0; SELECT @row_num:=@row_num+1 AS `row_num`, t_table.* FROM t_table WHERE type_id>0 ORDER BY type_id ASC, type_place_id DESC, user_id DESC LIMIT 100; 列中)。

    1. 第二步是保存点击记录的row_num值($ current)。
    2. 因此,要获取有关当前记录的数据,您可以使用下一个查询:

      row_num
    3. 关于上一个:

      SET @row_num=0;
      SELECT * FROM 
      (SELECT @row_num:=@row_num+1 AS `row_num`, t_table.* FROM t_table WHERE type_id>0 ORDER BY type_id ASC, type_place_id DESC, user_id DESC LIMIT 100) AS counted_view WHERE counted_view.row_num = {$current};
      

      下一条记录:

          SET @row_num=0;
          SELECT * FROM 
          (SELECT @row_num:=@row_num+1 AS `row_num`, t_table.* FROM t_table WHERE type_id>0 ORDER BY type_id ASC, type_place_id DESC, user_id DESC LIMIT 100) AS counted_view WHERE counted_view.row_num = {$current - 1};