PHP/MySQL предишен и следващ запис

mind_blower

Registered
Здравейте, имам следният скрипт и се опитвам да го направя да извежда предишен и следващ резултат от базите данни, до тук добре обаче ако се въведе index.php?id=1 извежда резултата на index.php?id=2 тоест 0=>1, 1=>2, 2=>3 ето го и скрипта :

PHP:
<?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'];



?>

Базата данни е структурирана по следният начин :

Код:
ID  String
1   Test 1
2   Test 2
3   Test 3
4   Test 4

Благодаря предварително :)
 
Аз до колкото разбрах при 1, ти изкарва 2. При 3 примерно ще ти изкара и 4 и 2(предишен и следващ).Та кое не е наред?

И защо не направиш заявката така:

[sql]SELECT * FROM records WHERE id = ? + 1;[/sql]

и

[sql]SELECT * FROM records WHERE id = ? - 1;[/sql]
 
Не, не се прави така... защото ако имаш записи 3,6,9 и т.н примерно си трил по-този начин ще се бъгне... Начина му е правилен обаче и в двете заявки ще е ASC...затова се бъгва може би... Пробвай

Има един начин да смешиш 3те заявки... т.е за сегашен,следващ и предишен.

[sql]
SELECT *,(SELECT * FROM records WHERE id > ? ORDER BY id ASC LIMIT 1) AS next,(SELECT * FROM records WHERE id < ? ORDER BY id ASC LIMIT 1) AS last FROM records WHERE id = ?
[/sql]

bind-ваш 1,2,3 да са $id

и после с row викаш $row['next']['íd'] и $row['last']['id'] в някой линк примерно...линка ще пише $row['next']['title'] примерно и т.н(ако не стане направи var_dump на $row и виж как точно ти е масива)

Този начин е същия като твоя но съкратен което значително ще подобри бързината и ще оптимизира кода!
 
Код:
SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;

Код:
SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;
 

Back
Горе