След и пред. запись

Aidar

Guest
След и пред. запись

Необходимо на страницу с отображением записи (например, с Id=5) поместить две ссылки:
"Предыдущая запись" ссылается на предудыщую запись в таблице (не факт, что у нее Id =4, может и, например, Id=3);
"Следующая запись" ссылается на следующую запись в таблице (также не факт, что у нее Id =6, может и, например, Id=10);

Id записей передаются методом GET. Пробовал вот так, но почему-то извлекается только одна текущая запись
PHP:
  $result = mysql_query( "SELECT Id FROM specialty ORDER BY Id" );
  $specstr = mysql_fetch_array( $result );
  if( $specstr['Id'] = $_GET['id'] ) {
    $next_page = next( $specstr );
    $prev_page = prev( $specstr );
  }
PHP:
<td align=center><br>[ <a href="?raz=spec&action=view&id=<?=$prev_page ?>">Предыдущая специальность</a> | <a href="?raz=spec&action=show">К списку</a> | <a href="?raz=spec&action=view&id=<?=$next_page ?>">Следующая специальность</a> ]<td>
Помоги плиз...

ЗЫ: В форуме поискал, нашел одну похожую тему, но конкретного ответа в ней не было.
 

Tor

Новичок
next()
prev()
это что за супер-секретные функции?

-~{}~ 26.04.05 14:45:

и вообще
ты знаешь id текущей записи
можешь ты найти id предыдущей и следующей?
двумя запросами, для начала
 

Лексеич

Московский калмык
Aidar
а насчет "не факт" делай цикл пока не найдет..


смайлик забыл :)
 

Лексеич

Московский калмык
А кстати как грамотно реализовать сей момент? Ввести поле 'poryadok' или типа того и сдвигать значения при удалении?
 

Tor

Новичок
Лексеич
давай ты не будешь задавать новые вопросы, не прочитав ответы на предыдущие, ок?
 

Vital_N

Новичок
Я делаю примерно так, хотя может и неправильно
next - SELECT Id FROM specialty WHERE id>текущего ORDER BY id ASC limit 1
prev - SELECT Id FROM specialty WHERE id<текущего ORDER BY id DESC limit 1
 

Tor

Новичок
ну и
что не работает?

-~{}~ 26.04.05 15:08:

вот так значительно лучше

next - SELECT Id FROM specialty WHERE id>текущего limit 1
prev - SELECT Id FROM specialty WHERE id<текущего limit 1
 

Vital_N

Новичок
Tor
работает прекрасно, я имею в виду может идеологически неверно ))

-~{}~ 26.04.05 16:12:

Tor только надо
для prev - SELECT Id FROM specialty WHERE id<текущего limit 1 все таки указать DESC
 

SelenIT

IT-лунатик :)
Order надо указывать в обоих случаях. Tor, не сбивай Vital_Nа с толку, показывая вместо его правильного варианта неправильный :)

Aidar
Дошло наконец, что у тебя не получается. print_r($specstr) тебе поможет понять твою ошибку. И [m]mysql_fetch_assoc[/m] заодно.
 

Vital_N

Новичок
Aidar
ты не только неправильно используешь полученный массив и функции next и prev но также у тебя присвоение вместо сравнения
if( $specstr['Id'] = $_GET['id'] ) {
 

Aidar

Guest
Сделал так
PHP:
$current = $_GET['id'];
  $next_result = mysql_query( "SELECT Id FROM specialty WHERE id>$current ORDER BY id ASC limit 1" );
  if( $next_pages = mysql_fetch_assoc( $next_result ) ) {
  $next_page = $next_pages['Id'];
  }
  $prev_result = mysql_query( "SELECT Id FROM specialty WHERE id<$current ORDER BY id DESC limit 1" );
  if( $prev_pages = mysql_fetch_assoc( $prev_result ) ) {
  $prev_page = $prev_pages['Id'];
  }
Может и грамоздко, но для начинающего кодера самое то. Если кто упростит код, буду только рад =).

-~{}~ 27.04.05 03:31:

Задача немного усложнилась. Объясню на примере:
В первый факультет (Fak=1) входят записи с Id=1-6, кроме Id=2.
Во второй факультет (Fak=2) входят записи с Id=2,7-12.
Как теперь произвести постраничный вывод, если необходимо, чтобы листались сначала записи одного факультета, а потом дугого.
 

Фанат

oncle terrible
Команда форума
а при чём здесь постраничный вывод?
Если у тебя задача по сортировке - то и задвай вопрос ПО СОРТИРОВКЕ.
И так же ведь никто твоих вопросов не понимает. А ты ещё больше запутываешь
 

Aidar

Guest
Фанат
Да, признаю, не умею я толком вопросы задавать. Что поделаешь. Если бы админ картинки разрешил было бы проще. А так уж извини, как могу.

Задача осталась преждней (как в начале темы). Только вот в табилце записи сначала сортируются по полю Fak (название факультета, к которому они принадлежат) а затем уж по полю Id. Про каждую конкретную запись можно прочесть небольшую информацию нажав кнопочку напротив нее. И чтобы пользователь каждый раз не возвращался к таблице, чтобы прочитать инфу про очередную запись в таблице, и вводятся ссылки внизу на предыдущую запись и на следующую.

Приведу кусочек этой самой таблицы:

|Id|Номер|................................Название..................................|Опции|
+--+-----+--------------------------------------------------------------------------+-----+
|...........Факультет.автоматизации.и.прогрессивных.технологий.(Fak=1)....................|
+--+-----+--------------------------------------------------------------------------+-----+
|1.|2102.|.Автоматизация.технологических.процессов.и.производств....................|инфо.|
|3.|1201.|Технология.машиностроения.................................................|инфо.|
|4.|1203.|Машины.и.технология.литейного.производства................................|инфо.|
|5.|1204.|Машины.и.технология.обработки.металлов.давлением..........................|инфo.|
|6.|1210.|Конструирование.и.производство.изделий.из.композиционных.материалов.......|инфо.|
+--+-----+--------------------------------------------------------------------------+-----+
|..........................Автомеханический.факультет.(Fak=2).............................|
+--+-----+--------------------------------------------------------------------------+-----+
|2.|1012.|Двигатели.внутреннего.сгорания............................................|инфо.|
|7.|1211.|Гидравлические.машины,.гидропривод.и.гидропневмоавтоматика................|инфо.|
|8.|1501.|Автомобиле-.и.тракторостроение............................................|инфо.|
|9.|1502.|Автомобили.и.автомобильное.хозяйство......................................|инфо.|
|10|2401.|Oрганизация.перевозок.и.управление.на.транспорте.(автомобильный.транспорт)|инфо.|
+--+-----+--------------------------------------------------------------------------+-----+

Как видно запись с id=2 идет не после id=1. И решение, предложенное Vital_N здесь уже не катит.
 

Фанат

oncle terrible
Команда форума
Дело не в том, что ты не умеешь вопросы формулировать.
А в том, что ты не знаешь даже, какой вопрос тебе задать.
И не умеешь читать.
Я тебе открытым текстом написать - у тебя вопрос по СОРТИРОВКЕ.
по сортировке у тебя вопрос.
прежде, чем делать постраничный вывод, надо научиться СОРИТРОВАТЬ. пока у тебя и бех предядущая-сдледующая ничего не выведется.
Потому, что надо сортировать. У тебя задача сейчас - как ты её сформулировал - по сортировке, а не по постраничному выводу. И метод виталия тебе поможет. Если ты научишься соритровать свой список.
 

Aidar

Guest
Фанат
Хорошо, согласен, что по сортировке. Ну не получается у меня сделать так, как я хочу. Научиться сортировать? Я, естественно, пытался решить данную проблему самостоятельно. Просидев до трех ночи ни к чему не пришел. Вот и залез на форум попросить у более опытных программистов помощи. И вместо того, чтобы указывать мне какая именно задача передо мною стоит, дал бы совет, как можно решить проблему. Если ты не знаешь или не понял вопроса (если судить по твоему последнему ответу - понял) , чтож, бывает, может поможет кто-то другой или мне придется отказаться от данной затеи.
 

Фанат

oncle terrible
Команда форума
Совершенно верно.
кто-то другой тебе ответит. после того, как я пояснил вопрос.
несмотря на твоё отчаянное сопротивление.
 
Сверху