我有一张这样的表
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
但是因为它有订单它不会工作......
任何人都可以与我分享想法吗? 提前致谢
答案 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)