Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно обновлять поле в определенных записях таблицы при изменении его значения. / 6 сообщений из 6, страница 1 из 1
01.05.2018, 18:48
    #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
01.05.2018, 21:16
    #39638816
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
Правильно. Потенциально изменение одной записи, приводящее к изменению другой записи той же таблицы - это зацикливание. И потому запрещено.

Поле defit следует сделать имеющим тип даты (или даты-времени, если админу делать нехрен, кроме как вручную менять дефолты). Соответственно дефолтным будет значение, тупо имеющее максимальное значение этого поля на ветке.
...
Рейтинг: 0 / 0
01.05.2018, 21:56
    #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
01.05.2018, 22:18
    #39638837
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно обновлять поле в определенных записях таблицы при изменении его значения.
dmneedall,

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


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