我有一个使用ID列表作为输入的查询(例如“WHERE XX IN(1,2,3,4)”)并且结果太多而无法在单个网页上显示。我计划的是什么要做的是限制结果并对它们进行分页。使用MySql,我添加了“LIMIT X OFFSET Z”。
我现在的问题是如何将信息传递给每一页。我可以使用其中的ID列表生成分页链接(例如<a href='link.php?i=1,2,3&page=1>1</a>
),或者我可以将它们存储在某处。因为我正在使用php,所以我想使用SESSION存储它们或者将它们写在cookie中。使用数据库是否过度?我现在可以使用cookie制作一个简单的解决方案,稍后再进行更改。在cookie中使用ID不是安全问题。即使用户将id添加到该列表也无关紧要。
SO上有一些答案,但似乎都没有解决所有可能性。
答案 0 :(得分:1)
是的,使用数据库是过度的。根据您的Web应用程序,会话和URL都是解决此问题的好方法。
我认为这两者的最佳解决方案是在URL中包含分页。在分享指向您应用的链接时,这会有很大帮助。 (Immagine向同事发送指向您应用中页面的链接......并且您正在使用会话进行分页)
在代码中为&#34;页面大小&#34;设置一个常量然后将其乘以查询字符串中的页码以获取偏移量。这是一个简化的代码示例来说明:
<?php
$limit = 30; // records per page to have more/less change this
$page = 0; // if not set, $page is 0 (first page)
if (isset($_GET['page']) {
$page = (int)$_GET['page']; // cast to int, to drop funny chars etc.
}
$offset = $page * $limit;
$query = "SELECT * FROM a_table WHERE some_col IN (1,2,3,4)";
// ... then, to add offset data to your query:
$query += " LIMIT $limit OFFSET $offset"; // mind the single space
然后,您的链接应包含下一页的page
arg:echo "link.php?i=1,2,3&page=".$page+1;
递增(或者有一个循环用于打印指向下一个n
页面的链接)。
单词警告:
WHERE XX IN (1,2,3,4)
的数据。请注意,执行此操作时,请注意sql注入。