我正在使用一个通用数据面板,该面板可以向该面板提供各种不同的查询。它们可能是从表或视图中选择的简单查询,也可能是用户使用复杂的联接和其他表达式自行定义的复杂查询。我正在尝试修改我的数据面板,以便如果用户选择一条记录,然后对表进行排序,我会找到该记录现在所在的页面,移动到该页面,然后重新选择该记录。
我已经解决了大部分问题,但我无法找到要移动到的页码。我最初只是简单地循环遍历数据面板中的行,但由于分页的原因,事实证明,页码越大,效率就越低。相反,我决定直接通过 SQL 来完成此操作,这就是我现在陷入困境的地方。
我决定,如果我可以通过运行产生结果的相同查询找到所选行的行号,我就可以计算出我需要移动到的最终页码并直接跳转到该页面。我获取了运行以生成结果的查询,并增加了一个变量以获取行号。
原来的查询是
select *
from table_a
order by column_c desc
Run Code Online (Sandbox Code Playgroud)
修改后的行号查询变成了
select *, (@rownum := @rownum + 1) as rownum
from
(select @rownum := 0) rn
, (
select *
from table_a
order by column_c desc
) data
Run Code Online (Sandbox Code Playgroud)
此时我正在选择所有记录。然后,我包装了上面的查询并选择了记录与我选择的记录匹配的最小行,如下所示
select min(rownum)
from
(
select *, (@rownum := @rownum + 1) as rownum
from
(select @rownum := 0) rn
, (
select *
from table_a
order by column_c desc
) data
) wrapper
where
primarykeyfield1 = ? …Run Code Online (Sandbox Code Playgroud)