我有一个列出所有产品的页面。这是一个很长的列表,所以我给了用户分页的能力,我给用户在页面底部的标准页面列表,以便他们可以转到下一页或任何页面。我根据产品总数和一页显示的行数计算页面。没问题。
$sql = "SELECT * from products limit " . $page . ', ' . $rows_per_page
我现在添加了搜索功能,因此用户可以使用以给定字母开头的产品开始列表,即以“s”或“sneaker”开头的产品开始。
我在搜索和分页方面遇到了问题。如何确定完整列表中的哪个页面,他们的搜索结果将会结束,以便我可以让他们转到下一页或上一页。
只提供下一页很容易,因为我可以从搜索产品开始一个新的分页列表:
$sql = "SELECT * from products WHERE product_name >= '". $search ."' limit " . $page . ', ' . $rows_per_page
但这不会让用户倒退。
答案 0 :(得分:0)
你有几个选择。
1)如果您的搜索表单使用GET,并且有一个带有开始记录的变量($ page),您可以按照您建议的方式执行此操作。例如,在“下一个”文本上链接到www.mydomain.com/search.php?s=$search&p=$page+10。这将允许您通过URL即时访问任何页面,但如果您有敏感信息,则不会很聪明。此外,您必须为每个页面单独调用服务器。
2)你可以按照你用SESSION变量间接建议的方式来做。您可以存储$ search和$ page,并将您的下一个/上一个按钮设置为POST表单。根据提交的变量,在$ page的前面或后面格式化MySQL查询限制。但同样,这需要为每个页面提供新的服务器请求。
3)您可以立即获取整个结果列表,并使用Javascript有选择地显示其中的一些。例如,您可以使用display:block在div中打印前十个结果,使用display:hidden在其他div中打印其他div。然后你的按钮可以有一个onclick事件,显示相应的div结果。
答案 1 :(得分:0)
我发现一些信息是Ian Storms在2007年编写的MySQL手册http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html,这似乎有效。我不知道效率或内部性能cos,我也不了解sql
set @row=-1;
select foo.Row,foo.product_name
from (select @row:= @row+1 AS Row, product_name from products order by product_name )
AS foo where foo.product_name='skyy';