我制作了这个php脚本,并试图让它返回下一行和前一行,但当我输入我的id时有一个问题,脚本返回不同的东西,例如:
这是我的数据库
ID String
1 Test 1
2 Test 2
3 Test 3
4 Test 4
所以如果我把/index.php?id=1返回id=2和id=2=>id=3的结果,依此类推。。。我的问题是如何修复它以返回准确的结果而不是+1。我尝试使用<=或=>运算符-结果是正确的,但我的链接不起作用。
这是的脚本
<?php
if(isset($_GET['id']))
{
$id = (int)$_GET['id'];
}else
{
$id = 0;
}
$stmt1 = $db->prepare("SELECT * FROM records WHERE id > ? ORDER BY id ASC LIMIT 1");
$stmt1->bindValue(1,$id);
$stmt1->execute();
$row = $stmt1->fetch();
$stmt2 = $db->prepare("SELECT * FROM records WHERE id < ? ORDER BY id DESC LIMIT 1");
$stmt2->bindValue(1,$id);
$stmt2->execute();
$row = $stmt2->fetch();
echo $row['id'];
echo "<br/>";
echo $row['string'];
?>
我不确定这个问题是否像那样愚蠢,但我没有其他解释。
要拥有您的页面,您需要进行3次选择:
- 获取当前页面数据
- 获取prev id
- 去拿下一个
但我只能看到2个选择
因此,您必须为显示的页面选择数据
if(isset($_GET['id']))
{
$sql = "SELECT * FROM records WHERE id = ?";
$stm = $db->prepare($sql);
$stm->execute(array($_GET['id']));
} else {
$sql = "SELECT * FROM records ORDER BY id ASC LIMIT 1";
$stm = $db->query($sql);
}
$row = $stm->fetch();
现在你可以去获得上一个和下一个ID
$sql = "SELECT id FROM records WHERE id < ? LIMIT 1";
$stm = $db->prepare($sql);
$stm->execute(array($row['id']));
$prev = $stm->fetchColumn();
$sql = "SELECT id FROM records WHERE id > ? LIMIT 1";
$stm = $db->prepare($sql);
$stm->execute(array($row['id']));
$next = $stm->fetchColumn();
我正在努力让它返回下一排和前一排
表中不存在"上一行"或"下一行"这类内容。如果没有显式排序,表必须被视为行的无序集合。并且您不应该依赖于auto_increment字段按顺序编号。例如:
- 因为在表上有交错插入
- 因为允许服务器在删除行之后重用autoincrement
您可能需要修改表结构以添加序列号:
CREATE TABLE tbl (id in primary key not null auto_increment,
sequence_number int unique,
value char(40));
在插入数据时,你可能会依赖这样的东西:
INSERT INTO tbl (sequence_number, value)
VALUES (SELECT COUNT(*) FROM tbl, ?)
以及"下一个"answers"上一个"的查询:
SELECT * FROM tbl WHERE sequence_number = ?-1 OR sequence_number = ?+1
ORDER BY sequence_number;