Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Декрементирование числовых полей
 
 автор: iv4art   (10.06.2011 в 15:51)   письмо автору
 
 

Есть таблица со следующей структурой:
id_record
name
position
id_owner

В id_record и name всё как всегда. В position числовые значения, от которых зависит порядок вывода строк на экран. В id_owner содержится значение id_record строки-хозяина. Т. е. с помощью id_owner создаётся иерархическая структура внутри записей. Если у строки хозяина нет, то id_owner=0. Получается древовидная структура. Position действует для всех строк с одинаковым id_owner.

Пример записей:
1 Первая строка 1 0
__4 Четвертая строка 1 1
__5 Пятая строка 2 1
__6 Шестая строка 3 1
2 Вторая строка 2 0
3 Третья строка 3 0

Собственно, вопрос: как должен выглдять sql-запрос для обновления записи? Поменять порядок для второй и третьей строки легко, так чтобы записи выглядели следующим образом:
1 Первая строка 1 0
__4 Четвертая строка 1 1
__5 Пятая строка 2 1
__6 Шестая строка 3 1
3 Третья строка 2 0
2 Вторая строка 3 0

Проблемы начались, когда я попытался перепривязать строку. Например, хочу отвязать четвёртую строку от первой, чтобы структура выглядела так:
1 Первая строка 1 0
__5 Пятая строка 1 1
__6 Шестая строка 2 1
2 Вторая строка 2 0
3 Третья строка 3 0
4 Четвертая строка 4 0

Как уменьшить значение поля position на единицу для всех записей, у которых position больше, чем у редактируемой?
Сейчас запрос у меня выглядит так:
UPDATE records SET position = position-1 WHERE position>1

Естественно, это не работает.

  Ответить  
 
 автор: cheops   (10.06.2011 в 16:06)   письмо автору
 
   для: iv4art   (10.06.2011 в 15:51)
 

>UPDATE records SET position = position-1 WHERE position>1
Нужно добавить условие принадлежности текущей ветви
UPDATE records SET position = position-1 WHERE position>1 AND id_owner = 1

PS Более того, вам потребуется еще один UPDATE-запрос для записей, которы будут идти после "Четвертая строка" на новом месте, если таковые окажутся.

  Ответить  
 
 автор: iv4art   (10.06.2011 в 19:03)   письмо автору
 
   для: cheops   (10.06.2011 в 16:06)
 

Аллилуйя, работает! У меня запрос оказывается так и был составлен, с id_owner - забыл дописать просто, когда пост создавал. Ошибка оказалась очевидной, учитывая что скрипт писал в пол-третьего ночи: я передавал только новое значение id_owner, а нужно было ещё и старое)) Ужас...( Запрос работает, спасибо огромное.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования