2012-08-17 67 views
1

我在查詢中遇到了一些不好的聯繫,我試圖創建'prev_id'來拉入$行結果鏈接。有沒有更好的方法來做到這一點?使用PDO獲取上一行下一行創建鏈接

編輯:錯誤是「檢查對應於您的MySQL服務器版本的手冊,以找到'prev_id'附近使用的正確語法。」

function traversePhoto($the_selected_id) { 
global $pdo; 

$id = $the_selected_id; 

$stmt_a = $pdo->prepare(" 
    (SELECT * FROM images WHERE id < '.intval($id).' ORDER BY id DESC LIMIT 1) 
    UNION (SELECT * FROM images WHERE id = (SELECT MAX(id) FROM images)) LIMIT 1 prev_id"); 
$stmt_b = $pdo->prepare(" 
    (SELECT * FROM images WHERE id > '.intval($id).' ORDER BY id ASC LIMIT 1) 
    UNION (SELECT * FROM images WHERE id = (SELECT MIN(id) FROM images)) LIMIT 1 next_id"); 

// $vars = array(':id' => $id); 
$prev = $stmt_a->execute(); 
$next = $stmt_b->execute(); 

if ($prev) { 
    while($row = $stmt_a->fetchObject()) { 
     echo '<a href="' . $row['prev_id'] . '">Previous</a>'; 
    } 
} else { 
    echo 'no previous'; 
} 

if ($next) { 
    while($row = $stmt_b->fetchObject()) { 
     echo '<a href="' . $row['next_id'] . '">Next</a>'; 
    } 
} else { 
    echo 'no next'; 
} 

}

+0

你可以嘗試存儲會話的查詢結果,並與跟蹤,其中是用戶當前位置等工作..而不是重新計算什麼上一個,下一個,最後一個等,每個頁面請求 – Gntem 2012-08-17 16:39:12

+0

地理 - 這將是什麼樣子? – jessicaldale 2012-08-17 16:44:10

+1

請不要使用'global's ... – 2012-08-17 16:50:10

回答

2

嘗試像這樣

<?php function traversePhoto($the_selected_id) { 
global $pdo; 

$id = $the_selected_id; 

$stmt_a = $pdo->prepare(" 
(SELECT * FROM images WHERE id < ? ORDER BY id DESC LIMIT 1) 
UNION (SELECT * FROM images WHERE id = (SELECT MAX(id) FROM images)) LIMIT 1"); 
$stmt_b = $pdo->prepare(" 
(SELECT * FROM images WHERE id > ? ORDER BY id ASC LIMIT 1) 
UNION (SELECT * FROM images WHERE id = (SELECT MIN(id) FROM images)) LIMIT 1"); 

// $vars = array(':id' => $id); 
$prev = $stmt_a->execute(array((int)$id)); 
$next = $stmt_b->execute(array((int)$id)); 

if ($stmt_a->rowCount() > 0) { 
    while($row = $stmt_a->fetch(PDO::FETCH_ASSOC)) { 
     echo '<a href="' . $row['prev_id'] . '">Previous</a>'; 
    } 
} else { 
    echo 'no previous'; 
} 

if ($stmt_b->rowCount() > 0) { 
    while($row = $stmt_b->fetch(PDO::FETCH_ASSOC)) { 
     echo '<a href="' . $row['next_id'] . '">Next</a>'; 
    } 
} else { 
echo 'no next'; 
} 
+0

抓取(2)在做什麼? – jessicaldale 2012-08-17 16:45:29

+1

它是fetch_assoc。這樣更好地使用它,但我得到了懶惰:'$ sth-> fetch(PDO :: FETCH_ASSOC);' – 2012-08-17 16:46:29

+0

感謝John - 它仍然不喜歡我在查詢中使用'prev_id'和'next_id' 。 – jessicaldale 2012-08-17 16:48:02