我制作了这个PHP脚本,我试着让它返回下一个和previus行,但是当我输入我的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'];
?>
答案 0 :(得分:1)
我不确定问题是否如此愚蠢,但我没有其他解释。
要获得您的页面,您需要进行3次选择:
但我只能看到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();
答案 1 :(得分:-1)
我试着让它返回下一个和previus行
表中没有“上一个”或“下一个”行。如果没有显式排序,则必须将表视为行的无序 set 。并且您不应该依赖auto_increment字段来按顺序编号。例如:
您可能需要修改表结构以添加序列号:
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, ?)
查询“next”和“prev”:
SELECT * FROM tbl WHERE sequence_number = ?-1 OR sequence_number = ?+1
ORDER BY sequence_number;