在我的PHP/mysql应用程序中,用户可以过滤和排序数据库中的记录。可以为每列单独设置过滤器,并且可以为每列 DESC/ASC 设置顺序。他得到了一个表格,他可以在其中单击以详细说明一条记录,并且详细是上一个和下一个按钮女巫将他带到下一个/上一个记录,关于他在桌子上设置的过滤器和顺序。
当表按列排序时,有什么方法可以获取下一个和上一条记录的 id,其中可以是重复值?我试过这样的事情:
select * from foo where column = (select min(column) from foo where column > 4)
但这不适用于前一列值与当前列值相同的记录。
因此,一个表可以有几百万条记录,我不能只选择所有记录并遍历整个表。
正确理解了你的问题,这个肮脏的东西可能会有所帮助:
首先,您可以像这样编写 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
列中)。
- 第二步是保存单击记录 ($current) row_num值。
因此,要获取有关当前记录的数据,您可以使用下一个查询:
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};