Думал над реализацией вывода записей из бд, относительно данной. Записи должны быть отсортированы по "рейтингу" и выводиться после нажатия на соотвествующие кнопки. вот собстна код, не пойму, что не работает в нем PHP: <? $db = new mysqli("localhost","php",12345,"anek"); if(!isset($_GET['id'])){ $sql = " SELECT * FROM `articles` WHERE `rate` = (SELECT MAX(rate) FROM `articles`)"; $select = $db->query($sql); $select = $select->fetch_array(); $_GET['id'] = $select['id']; $_GET['rate'] = $select['rate']; } else{ $ID = $_GET['id']; //NEXT------------------- if(isset($_GET['right'])){ $sqlN = " SELECT * FROM `articles` WHERE `id` > {$ID} ORDER BY `rate` DESC "; $selecT = $db->query($sqlN); $selecT = $selecT->fetch_array(); } //PREVIEW---------------- if(isset($_GET['left'])){ $sqlP = " SELECT * FROM `articles` WHERE `id` < {$ID} ORDER BY `rate` ASC "; $selectT = $db->query($sqlP); $selectT = $selectT->fetch_array(); } } ?> <div class="content"> <? echo $select['text'].$selecT['text']; ?> </div> <form id="np"> <span left>←<input type="submit" name="left" style="display: none;" value="true"></span> <span right><input type="submit" name="right" style="display: none;" value="true">→</span> </form> и js на всякий случай кидаю, но тут вроде всё норм и в гет уходят вэлью с кнопок Код (Javascript): var right = document.querySelector('[right]'), left = document.querySelector('[left]'); window.onkeydown = function(event){ if(event.which == 39){ document.getElementsByName('right')[0].click(np.submit()); right.className = 'right'; } if(event.which == 37){ document.getElementsByName('left')[0].click(np.submit()); left.className = 'left'; } Ошибок никаких нет, просто ничего не робит
Вы используете разные запросы для выборки одной последовательности. Для начала нужно написать один единый запрос для выборки записей в нужной последовательности, а затем модифицировать его при помощи LIMIT ?,1
Общий запрос: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC Запрос для выборки одной записи: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC LIMIT ?,1 Максимальный рейтинг: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC LIMIT 0,1 Если текущая запись 13-я в этом списке: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC LIMIT 12,1 то пердыдущая: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC LIMIT 11,1 и следующая: Код (Text): SELECT * FROM `articles` ORDER BY `rate` DESC LIMIT 13,1 т.е адресация по записям идет не по ID, а по порядковому номеру в результатах основного запроса.
Смысл до меня дошел, но как применить это в моем случае? + если я всё правильно понял, то разницы между вашим и моим запросами практически нет, вы используете лимит, а я ид?
@Cyrius, разницы нет. Только выборка по ID не отвечает этому условию: Я бы через GET передавал номер нужной записи в отсортированном списке вместо ID
Он получается из результатов запроса. Если Вы выбрали запись с номером X, то на кнопку "left" в GET ставите номер (X-1), а на кнопку "right" (X+1). Только не в сами параметры 'left' и 'right', а в какой-нибудь общий параметр, например 'num' Например, для записи с максимальным рейтингом номер будет 0. При этом предыдущей записи нет и кнопка "left" должна быть неактивной, а на кнопке "right" стоять номер 1.