从自定义排序和过滤中获取上一个和下一个 ID table
get previous and next id from customly ordered and filtered table
在我的 PHP/mysql 应用程序中,用户可以从数据库中筛选和排序记录。可以为每一列单独设置过滤器,并且可以为每一列设置顺序DESC/ASC。他得到一个 table ,他可以在其中单击以详细说明一条记录,详细信息是上一个和下一个按钮 将他带到 next/previous 关于他在 [= 设置的过滤器和顺序的记录24=]。
当 table 按可能是重复值的列排序时,有什么方法可以获取下一条和上一条记录的 ID?我试过这样的事情:
select * from foo where column = (select min(column) from foo where column > 4)
但这不适用于前一列值与当前列值相同的记录。
因为 table 可以有数百万条记录,我不能只 select 全部并遍历整个 table。
如果我正确理解了你的问题,这个脏东西可能会有帮助:
首先,您可以这样编写 SELECT 查询:
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;
这里的要点是获取每一行的订单号(将出现在 row_num
列中)。
- 第二步保存点击记录的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};
关于上一个:
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};
下一条记录:
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};
在我的 PHP/mysql 应用程序中,用户可以从数据库中筛选和排序记录。可以为每一列单独设置过滤器,并且可以为每一列设置顺序DESC/ASC。他得到一个 table ,他可以在其中单击以详细说明一条记录,详细信息是上一个和下一个按钮 将他带到 next/previous 关于他在 [= 设置的过滤器和顺序的记录24=]。
当 table 按可能是重复值的列排序时,有什么方法可以获取下一条和上一条记录的 ID?我试过这样的事情:
select * from foo where column = (select min(column) from foo where column > 4)
但这不适用于前一列值与当前列值相同的记录。
因为 table 可以有数百万条记录,我不能只 select 全部并遍历整个 table。
如果我正确理解了你的问题,这个脏东西可能会有帮助:
首先,您可以这样编写 SELECT 查询:
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;
这里的要点是获取每一行的订单号(将出现在 row_num
列中)。
- 第二步保存点击记录的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};
关于上一个:
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};
下一条记录:
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};