2013-07-29 3 views
0

это мой сценарийMySQL следующая предыдущая запись проблема

<?php 

if(isset($_GET['id'])) 
{ 
    $id = $_GET['id']; 
} 
else 
{ 
    $id = 1; 
} 

    $random = $conn->query("SELECT * FROM records ORDER BY RAND()"); 
    $row = $random->fetch(); 

    $stmt_1 = $conn->prepare("SELECT * FROM records WHERE id > ? ORDER BY id ASC LIMIT 1"); 
    $stmt_1->bindValue(1,$id); 
    $stmt_1->execute(); 
    $stmt_1->setFetchMode(PDO::FETCH_ASSOC); 
    $row = $stmt_1->fetch(); 
    $id = $row['id']; 

    $stmt_1 = $conn->prepare("SELECT * FROM records WHERE id < ? ORDER BY id DSC LIMIT 1"); 
    $stmt_1->bindValue(1,$id); 
    $stmt_1->execute(); 
    $stmt_1->setFetchMode(PDO::FETCH_ASSOC); 
    $row = $stmt_1->fetch(); 
    $id = $row['id']; 

    ?> 

Но у меня есть проблемы с ним. Например у меня есть 4 записей в базе данных:

ID String 
1 Test-1 
2 Test-2 
3 Test-3 
4 Test-4 

запрос отлично работает это дает мне следующую запись, но не идентификатор, который я поставил, как если бы я поставил ID = 1 возвращает ID 2 или ID = 2 возвращает данные для id 3, и результат не является точным. Поэтому мой вопрос заключается в том, что я должен делать id, чтобы вернуть правильный результат, а не +1. Я знаю, что он начинает считать от 0, и я хочу, чтобы установить, что в моем сценарии я хочу сделать это, чтобы начать с 1

ответ

1

заменить этот

$id = 1; 

по

$id = 0; 

или заменить это

SELECT * FROM records WHERE id > ? 

по

SELECT * FROM records WHERE id >= ? 
            ^--//-will look for id equal to 1 or bigger 
+0

Большого спасибо теперь он работает, но моя гиперссылка Next Бруса работы теперь .. –

+0

в вашей гиперссылке, какой вы хотите идентификатор? тот же идентификатор или id + 1? –

+0

добро пожаловать! , –

0

почему бы вам не изменить ваш запрос

EDIT: Запрос не будет работать, как записи будут удалены.

$stmt_1 = $conn->prepare("SELECT * FROM records WHERE id = ?"); 
$stmt_1->bindValue(1,$id +1); 
$stmt_1->execute(); 

Таким образом, вы получите запись со следующим самым высоким идентификатором.

Просто подсказка для оптимизации вашего запроса. Еще один вопрос: вы используете auto_increment в определении таблицы. Если вы сделаете это, вы shold иметь в виде, что это MySQL-последовательность начинается с одного, чтобы вычислить первичный ключ

Надеется, что это помогает

+0

Спасибо за подсказку. Да ID - A_I, но я не думаю, что с $ stmt_1-> bindValue (1, $ id +1); я получу следующий возможный reccord, что, если следующий id будет удален? –

+0

Вы правы. Не упомянули об этом случае. прости – ZeusNet

Смежные вопросы