Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как вывести предыдущий и следующий id новости из таблицы?

#php #mysql


Добрый день, имеем таблицу с id новостей:

id |
5  |
7  |
15 |
20 |

И запрос:

$query = "select * from articleviews order by articleid desc limit 1";
$results = mysql_query($query,$connection) or die(mysql_error());
$lastid = mysql_fetch_array($results);

//Previous link
$previousid = $_GET['id']-1;
if ($previousid < 1) {
    $previous = "";
} else {
    $previous = '/article.php?id='.$previousid;
}

//Next link
$nextid = $_GET['id']+1;
if ($nextid > $lastid['id']) {
    $next = "";
} else {
    $next = '/article.php?id='.$nextid;
}


Но в итоге в ссылку вставляются только id по порядку от открытой новости.
Например, на новости, у которой id 15, предыдущая ссылка будет на новость с id 14,
а не 7. Помогите вывести существующие id на новости.
    


Ответы

Ответ 1



select (select id from articleviews where id < ? order by id desc limit 1) as prev, (select id from articleviews where id > ? order by id limit 1) as next

Ответ 2



Вам придется запросить идентификаторы следующей и предыдущей записей при помощи отдельных запросов. Идентификатор предыдущей записи: SELECT articleid AS previousid FROM articleviews WHERE articleid < $lastid ORDER BY articleid DESC LIMIT 1 Идентификатор следующей записи: SELECT articleid AS nextid FROM articleviews WHERE articleid > $lastid ORDER BY articleid DESC LIMIT 1

Ответ 3



Воспользуйтесь запросом: select min(id) as prev,max(id) as next from ( select id from articleviews where id>=(select coalesce(max(id),?) from articleviews where id < ?) order by id limit 3 ) A В место ? надо привязать ваш текущий ID. На выходе в массиве результатов сразу лежат prev и next. Если полученные переменные равны текущему ID или NULL - значит заданный ID был первым или последним, не выводите такую ссылку.

Комментариев нет:

Отправить комментарий