我尝试创建一个显示表格内容的脚本,并突出显示用户搜索的元素。
输出必须突出显示等于或大于搜索值的第一个元素。
搜索的值是表的一个键(varchar) 我只需要输出包含元素的页面,而不是输出表格中的所有数据(分页)。
这就是我想要实现的目标:
目前我的脚本的工作方式如下:
我不认为使用第一点中提到的基于记录集/数组的方法是一个很好的方法,因为它有很多元素(100.000),我只需要向用户显示一个页面。但是,我无法找到最佳方法。
你认为有办法改进这个解决方案吗?
下图是我想要做的一个例子:
语言: PHP DBMS: Sql Server
答案 0 :(得分:1)
将所有内容加载到PHP数组中并在PHP上执行RDBMS的工作是一个非常糟糕的主意。请记住,通过这种方式,您可以将大量数据加载到RDBMS上的内存中,RDBMS会将大量数据的响应发送到应用程序服务器,这将在该级别执行一项不合适的工作,从而丢失索引和内容。而不是那样,你可以使用这样的脚本:
declare @pageSize int;
declare @value varchar;
declare @elementIndex int;
declare @currentPage int;
set @pageSize = 100;
set @value = 'foobar';
set @elementIndex = (select count(*)
from MyTable
where MyTable.MyColumn < @value);
set @currentPage = (@elementIndex + 1) / @pageSize;
WITH Rows AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY [dbo].[MyColumn]) [Row]
, *
FROM
[dbo].[MyTable]
)
SELECT TOP 10
*
FROM
Rows
WHERE Row > (@pageSize * (@currentPage - 1));
你可以从PHP生成这个,或者编写一个存储的函数并根据需要调用它,只需确保你自己免受SQL注入。
答案 1 :(得分:0)
“更好”的解决方案取决于您在数据库和SQL服务器上的负载量。
通常,sql数据库选择小范围比选择整个表格要快得多。因此,每次使用SQL LIMIT移动到下一页或上一页时,我都会选择sql中的小范围。