PHP - MySQL“next” - “previous”链接与订购

时间:2013-05-21 10:12:48

标签: php mysql navigation pagination fetch

我有一张这样的表

id    |   name      |  image     |    ordering
------+-------------+------------+--------------
1     |   name 1    |  one.jpg   |      5
------+-------------+------------+--------------
2     |   name 2    |  two.jpg   |      2
------+-------------+------------+--------------
3     |   name 3    |  thr.jpg   |      3
------+-------------+------------+--------------
4     |   name 4    |  for.jpg   |      7
------+-------------+------------+--------------
5     |   name 5    |  fiv.jpg   |      1
------+-------------+------------+--------------
6     |   name 6    |  six.jpg   |      9
------+-------------+------------+--------------

我要求根据订单在页面中显示第一张图片。以下查询适用于我

SELECT * FROM images ORDER BY ordering ASC LIMIT 0,1 - row with id 5 will return

接下来我必须在底部显示2个链接“Prev”和“Next”(因为这是第一页不需要显示“Prev”)

Okey ..按下“Next”,我必须显示下一页(即根据表格,其行为id 2)。在该页面中需要显示“prev”,这将导致第一个结果。该页面的“下一步”必须指向ID为3的行

我试过了

select * from images where id < $local_id order by id desc limit 1
 select * from images where id > $local_id order by id asc limit 1

但是因为它有订单它不会工作......

任何人都可以与我分享想法吗? 提前致谢

4 个答案:

答案 0 :(得分:3)

在MySQL LIMIT X, Y中是你想要的范围,其中X是起始行(0是第一行),Y是要返回的行数

要实现您想要的效果,您需要为您所在的每个页面使用页码,然后使用它们来计算X值,Y始终为1,因为您每页只需要1张图像。

这样的事情会让你开始:

<?php

$page = (isset($_GET['page'])) ? $_GET['page'] : 1;

$startPoint = $page - 1;

$query = "SELECT * FROM images ORDER BY ordering ASC LIMIT $startPoint,1";

$rowCount = 0; // replace this with a count of all your rows/images

然后你的链接就像

<a href="index.php?page=1">First</a>
<a href="index.php?page=<?php echo $page - 1?>">Prev</a>
<a href="index.php?page=<?php echo $page + 1?>">Next</a>
<a href="index.php?page=<?php echo $rowCount;?>Last</a>

答案 1 :(得分:1)

下一步

select * from images where id = $local_id+1 limit 1

select * from images where id = $local_id-1 limit 1

答案 2 :(得分:1)

您可以更改限制以实现它,根据页面更改来更改限制。

    SELECT * FROM images ORDER BY ordering ASC LIMIT 1,1 - row with id 2 will return
    SELECT * FROM images ORDER BY ordering ASC LIMIT 2,1 - row with id 3 will return

答案 3 :(得分:1)

不好+1 / -1是坏的,防止id(页面)不存在,使用sql以前的id。

示例ur主页ID 3和id 4不存在...发生:

下一步:

select * from images where id = (select min(id) from images where id > 4)

一个:

select * from images where id = (select max(id) from images where id < 4)