powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно обновлять поле в определенных записях таблицы при изменении его значения.
6 сообщений из 6, страница 1 из 1
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638792
dmneedall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть древовидный бинарный справочник типа: id, id_parent, name, deflt.
поле deflt - признак выбранного по умолчанию значения для конкретной ветви справочника (1 - значение по умолчанию. 0 - соотв. - нет).
Смысл в том, что если я в админовском фронте устанавливаю записи значение deflt = 1 все остальные значения для этого справочника автоматом скинутся в 0.

Пробовал так:
-----------------------------------------
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE 
	DEFINER = 'mysql'@'%'
TRIGGER mybase.resetDefault
	AFTER UPDATE
	ON mybase.dictionary
	FOR EACH ROW
BEGIN
  UPDATE dictionary
    SET deflt = 0 
    WHERE id_parent = old.id_parent AND id != old.id;  
END


-----------------------------------------
получается ошибка при любой операции со справочником:
Can't update table 'dictionary' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
...
Рейтинг: 0 / 0
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638816
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно. Потенциально изменение одной записи, приводящее к изменению другой записи той же таблицы - это зацикливание. И потому запрещено.

Поле defit следует сделать имеющим тип даты (или даты-времени, если админу делать нехрен, кроме как вручную менять дефолты). Соответственно дефолтным будет значение, тупо имеющее максимальное значение этого поля на ветке.
...
Рейтинг: 0 / 0
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638834
dmneedall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Ну или сделать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
update tbl 
 set deflt=0
where id_parent=:id_parent;

update tbl
 set deftl=1
where id_parent=:id_parent and id=:id



без триггеров, тупо два раза ... .
Не очень красиво, но думаю будет работать.
...
Рейтинг: 0 / 0
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638837
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmneedall,

тогда уж
Код: sql
1.
2.
3.
update tbl
 set deftl=(id=:id)
where id_parent=:id_parent
...
Рейтинг: 0 / 0
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638840
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmneedallНе очень красиво, но думаю будет работать.
Вынос логики в хранимые процедуры - вполне разумное решение.
...
Рейтинг: 0 / 0
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
    #39638842
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij , единственная тонкость - лишь бы корень не определялся как id_parent IS NULL...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно обновлять поле в определенных записях таблицы при изменении его значения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]