Вопрос по MySQL

[Удален]
611

Привет, как определить предыдущею и следующею запись в базе? Вообщем надо, что бы по запросу к записи прибавлялось (/ минусовалось) значение предыдущей записи или следующей записи.

mysql_query("update baza SET mesto= id+-предыдущая запись / следующая+1 where id='$id2' ")

Заранее спасибо...

N
На сайте с 06.05.2007
Offline
419
#1

Вообще говоря, следуя концепции субд, порядок строк в таблице не определен.

Уясните, что для вашей задачи порядок и поэкспериментируйте с подзапросами .

Если действительно остро стоит вопрос производительности, можно решать эту задачу через переменные mysql, которые вычисляются при переборе строк по заданному order by.

Кнопка вызова админа ()
[Удален]
#2
netwind:
Вообще говоря, следуя концепции субд, порядок строк в таблице не определен.
Уясните, что для вашей задачи порядок и поэкспериментируйте с подзапросами .

Если действительно остро стоит вопрос производительности, можно решать эту задачу через переменные mysql, которые вычисляются при переборе строк по заданному order by.

Вообщем стоит задача контролировать порядок выведения данных (какой после какого и он может меняться) из бд на сайте (товары из каталога). Решил сделать на примере Bitrix т.е создал в таблице новую колонку "mesto2" и вписал под каждый товар значение 10, 20, 30 и тд. после чего при выводе товаров на сайте сделал "order by mesto2 ASC", проблема в том что в админ панели теперь надо сделать кнопочки "вверх, вниз " (что бы изменять положения товара) а правельно изменить значения я могу только зная значение предыдущей или следующий записи + при создание товара тоже надо знать значание предыдущей записи...

если знаете более рациональный способ с удовальствием Вас выслашую:)

N
На сайте с 06.05.2007
Offline
419
#3

Раз записи достаются по порядку, можно сразу на php сформировать код кнопок и передавать ид последующей и предыдущей записи для каждой записи. как то так : move.php?move=up&id=123&prev=122 и вниз : move.php?move=down&id=123&prev=124

а можно в mysql (тут появляется возможность продвигать на N записей вперед-назад):

1. после нажатия на кнопку мы знаем уникальный ид записи и её mesto2 - $mesto1

(надеюсь вы уже знаете что такое первичный ключ).

2. ищем следующую запись : select id,mesto2 .. where mesto2 > $mesto1 order by mesto2 limit 1

3. теперь мы знаем два уникальных id записей и их mesto2 , а значит можем обновить им поле mesto2 двумя запросами:

update .. set mesto2=$mesto2 where id=$id1

update .. set mesto2=$mesto1 where id=$id2

ну и там дальше нафантазируете..

[Удален]
#4
netwind:
Раз записи достаются по порядку, можно сразу на php сформировать код кнопок и передавать ид последующей и предыдущей записи для каждой записи. как то так : move.php?move=up&id=123&prev=122 и вниз : move.php?move=down&id=123&prev=124

а можно в mysql (тут появляется возможность продвигать на N записей вперед-назад):
1. после нажатия на кнопку мы знаем уникальный ид записи и её mesto2 - $mesto1
(надеюсь вы уже знаете что такое первичный ключ).
2. ищем следующую запись : select id,mesto2 .. where mesto2 > $mesto1 order by mesto2 limit 1
3. теперь мы знаем два уникальных id записей и их mesto2 , а значит можем обновить им поле mesto2 двумя запросами:
update .. set mesto2=$mesto2 where id=$id1
update .. set mesto2=$mesto1 where id=$id2

ну и там дальше нафантазируете..

Спасибо большое!) как я раньше не догнал что можно просто where mesto2 > $mesto1 order by mesto2 limit 1)))

Вопрос исчерпан тему думаю можно закрыть....

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий