2013-08-01 51 views
-1

我做了這個PHP腳本,我試着讓它到下一個和previus行返回,但有一個問題,當我輸入我的身份證腳本例如返回不同的東西:MySQL的未來和prev記錄問題

這是我的DB

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']; 

?> 
+1

你難道不想擁有2作爲下一個ID爲1?它有什麼問題? –

+0

如果你把ID = 1它返回ID = 2的詳細信息,所以ID = 0返回ID = 1的細節 –

回答

1

我不確定問題是否如此愚蠢,但我沒有其他解釋。

要讓你的頁面,你需要做3種選擇:

  1. 得到當前頁面的數據
  2. 獲得分組編號
  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(); 

,現在你可以去讓prev和next IDS

$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(); 
+0

好吧我的錯誤謝謝你隊友終於它的工作:) –

-1

我是試着讓它到下返回和previus行

有沒有這樣的事情在「前一個」或「下一個」行一張桌子。如果沒有明確的排序,則必須將表視爲無序的行的集合。你不應該依靠auto_increment字段來順序編號。例如:

  • 因爲總有被交織在表插入,
  • ,因爲服務器允許的行刪除後重用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; 
+0

所以我需要查詢選擇所有記錄?你什麼意思? –