来自Mysql的Php分页选择* Where;如果单击下一页编号,则显示Mysql中的所有行

时间:2013-06-17 06:51:12

标签: php mysql pagination

在输入字段中,用户输入条件 - 从mysql获取什么数据。例如,用户想要获取月份为10月(或10)的mysql行。

我在这里收到用户输入$date_month = $_POST['date_month'];

然后是mysql语句和分页代码

try {
$sql = $db->prepare("SELECT * FROM 2_1_journal WHERE RecordMonth = ? ");
$sql->execute(array($date_month));

foreach ($sql as $i => $row) {
}

$number_of_fetched_rows = $i;
$number_of_results_per_page = 100;
$total_pages = ceil($number_of_fetched_rows / $number_of_results_per_page);

if (isset($_GET['page']) && is_numeric($_GET['page'])) {
$show_page = $_GET['page'];

if ($show_page > 0 && $show_page <= $total_pages) {
$start = ($show_page -1) * $number_of_results_per_page;
$end = $start + $number_of_results_per_page; 
}
else {

$start = 0;
$end = $number_of_results_per_page; 
}   
}
else {
$start = 0;
$end = $number_of_results_per_page; 
}

for ($page_i = 1; $page_i <= $total_pages; $page_i++) {
echo "<a href='__filter_mysql_data.php?page=$page_i'>| $page_i |</a> ";
}

}

因此,用户输入月份(10),脚本显示月份为10的所有行;显示页面否1.但是如果用户单击其他页码,脚本将显示来自mysql的所有数据(所有月份,不仅仅是10)

我看到 - 当点击其他页码时,页面重新加载,这意味着php变量的值“消失”。在页面重新加载$date_month值未设置(丢失/“消失”)之后理解为什么?如何保持价值?或者可能是更好的分页解决方案?

更新

行为如下:

1)在输入字段中设置第10个月(10月);

2)点击按钮,从月份为10(10月)的mysql中显示数据;到目前为止还可以。

3)点击第2页并显示来自mysql的所有数据(所有月份,不仅仅是10月(10月)

尝试使用LIMIT,但它无济于事。

可能问题与此代码有关

for ($page_i = 1; $page_i <= $total_pages; $page_i++) {
echo "<a href='__filter_mysql_data.php?page=$page_i'>| $page_i |</a> ";
}

点击$page_i因为不可理解(对我而言)原因显示来自mysql的所有(未过滤)数据。如果我使用LIMIT,也会显示来自mysql的未过滤结果....

2 个答案:

答案 0 :(得分:0)

在您的查询中使用LIMIT,查看以下example,您可以尝试以下内容:

SELECT 
    * 
FROM 
    2_1_journal 
WHERE 
    RecordMonth = ? 
LIMIT [start_row],[number_of_rows_per_page]

例如,假设您有2个页面,每页10行,那么2个查询的LIMIT(每页一个)将是:

1)LIMIT 0,10
2)LIMIT 10,10

答案 1 :(得分:0)

您应该像这样更改您的查询:

SELECT * FROM 2_1_journal WHERE RecordMonth = ? LIMIT = $number_of_results_per_page OFFSET ($page_number*$number_of_results_per_page);

在这里你还需要计算页码,你应该使用mysql的限制和偏移概念。