|
|
|
| Есть таблица со следующей структурой:
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
Естественно, это не работает. | |
|
|
|
|
|
|
|
для: 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-запрос для записей, которы будут идти после "Четвертая строка" на новом месте, если таковые окажутся. | |
|
|
|
|
|
|
|
для: cheops
(10.06.2011 в 16:06)
| | Аллилуйя, работает! У меня запрос оказывается так и был составлен, с id_owner - забыл дописать просто, когда пост создавал. Ошибка оказалась очевидной, учитывая что скрипт писал в пол-третьего ночи: я передавал только новое значение id_owner, а нужно было ещё и старое)) Ужас...( Запрос работает, спасибо огромное. | |
|
|
|