powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с повторением значения.
8 сообщений из 8, страница 1 из 1
Помогите с повторением значения.
    #34660759
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется две таблицы users и personal. и users и personal имеют кучу колонок. Задача стоит в том что бы при вводе в одну из колонок users повторение происходило в определенную колонку personal. Как это лучше сделать? Спасибо.
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34661279
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prodiderИмеется две таблицы users и personal. и users и personal имеют кучу колонок. Задача стоит в том что бы при вводе в одну из колонок users повторение происходило в определенную колонку personal. Как это лучше сделать? Спасибо.
1. Судя по всему небольшая кривизна нормализации БД. посмотрите в сторону нормализации.
2. Если 1 пункт или пофиг или еще чего - триггерное обновление другой таблицы. Т.е. триггер на users который обновляет personal.
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34661362
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey Daeron prodiderИмеется две таблицы users и personal. и users и personal имеют кучу колонок. Задача стоит в том что бы при вводе в одну из колонок users повторение происходило в определенную колонку personal. Как это лучше сделать? Спасибо.
1. Судя по всему небольшая кривизна нормализации БД. посмотрите в сторону нормализации.
2. Если 1 пункт или пофиг или еще чего - триггерное обновление другой таблицы. Т.е. триггер на users который обновляет personal.

Спасибо. Триггеры уже колупаю.
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34661478
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prodider Andrey Daeron prodiderИмеется две таблицы users и personal. и users и personal имеют кучу колонок. Задача стоит в том что бы при вводе в одну из колонок users повторение происходило в определенную колонку personal. Как это лучше сделать? Спасибо.
1. Судя по всему небольшая кривизна нормализации БД. посмотрите в сторону нормализации.
2. Если 1 пункт или пофиг или еще чего - триггерное обновление другой таблицы. Т.е. триггер на users который обновляет personal.

Спасибо. Триггеры уже колупаю.

А как правильно написать триггер когда в таблице users есть колонка name и при вводе в нее значения она проинсертилась в таблицу personal колонку name? Вот наброски. Можт кто подмогнет?!
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
UPDATE personal SET name=(как тут присвоить значение, которое инсертят уже в name таблицы users)
END;
' LANGUAGE 'plpsql';
CREATE TRIGGER insert_name AFTER INSERT ON users FOR EACH ROW EXECUTE
PROCEDURE insert_name_to_personal()
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34662026
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prodider
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
UPDATE personal SET name=(как тут присвоить значение, которое инсертят уже в name таблицы users)
END;
' LANGUAGE 'plpsql';
CREATE TRIGGER insert_name AFTER INSERT ON users FOR EACH ROW EXECUTE
PROCEDURE insert_name_to_personal()

синтаксис нужно подпроверить.
Код: plaintext
1.
2.
3.
4.
5.
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
  UPDATE personal SET name=new.name WHERE personal.user_id=new.id;
END;
' LANGUAGE 'plpsql';

ЗЫ Вы уверены на счет правильной нормализации? Это важный вопрос.
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34662066
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey Daeron prodider
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
UPDATE personal SET name=(как тут присвоить значение, которое инсертят уже в name таблицы users)
END;
' LANGUAGE 'plpsql';
CREATE TRIGGER insert_name AFTER INSERT ON users FOR EACH ROW EXECUTE
PROCEDURE insert_name_to_personal()

синтаксис нужно подпроверить.
Код: plaintext
1.
2.
3.
4.
5.
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
  UPDATE personal SET name=new.name WHERE personal.user_id=new.id;
END;
' LANGUAGE 'plpsql';

ЗЫ Вы уверены на счет правильной нормализации? Это важный вопрос.

По другому не вижу выхода. Есть таблица в которей работают одни люди. Есть таблица которую будут забивать другие. Имена name должны быть идентичны(без ошибок) т/е/ когда человек пишет Петр Петрович то у второго нужно только добить дополнительные значения на него(он уже есть в таблице и триггер это сделает). когда же Петр Петрович не будет виден, человек должен будет забивать самостоятельно (введет с ошибкой Петер Петрович). Далее из этих таблиц селектиться результат типа select такие-то колонки where name одной колонки равно name другой.
Возможен правда вариант делать представление для огромной таблицы (сбить две в одну). Но когда она разрастется будет куда тяжелее.
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34662177
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey Daeron prodider
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
UPDATE personal SET name=(как тут присвоить значение, которое инсертят уже в name таблицы users)
END;
' LANGUAGE 'plpsql';
CREATE TRIGGER insert_name AFTER INSERT ON users FOR EACH ROW EXECUTE
PROCEDURE insert_name_to_personal()

синтаксис нужно подпроверить.
Код: plaintext
1.
2.
3.
4.
5.
CREATE FUNCTION insert_name_to_personal() RETURNS varchar AS'
BEGIN
  UPDATE personal SET name=new.name WHERE personal.user_id=new.id;
END;
' LANGUAGE 'plpsql';

ЗЫ Вы уверены на счет правильной нормализации? Это важный вопрос.

Не срабатывает. Грит ЕРРОР at or near "UDPATE" Я лично сам не вижу где привязка к тому что бы сравнить новое значение в таблице users и заSETить его как name. name=new.name (new.name откуда возьмется?! его ж нужно как-то обьявить?!)
...
Рейтинг: 0 / 0
Помогите с повторением значения.
    #34667416
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prodider
Не срабатывает. Грит ЕРРОР at or near "UDPATE" Я лично сам не вижу где привязка к тому что бы сравнить новое значение в таблице users и заSETить его как name. name=new.name (new.name откуда возьмется?! его ж нужно как-то обьявить?!)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE FUNCTION insert_name_to_personal()  RETURNS trigger AS
$body$
BEGIN
  UPDATE personal SET name=new.name WHERE personal.user_id=new.id;
  RETURN new;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Это правльный синтаксис. + еще сделать триггер который будет вызывать эту функцию, на AFTER INSERT ROW.

ИМХО (не видя полной структыр тяжело сказать, но) правильно было бы вынести эти даные в отдельную таблицу, а потом уже создавать как персон так и юзеров (если они таки не связаны) со ссылкой на эту таблицу. Ибо данные которые вводятся два раза - ложь есть :)
Если это интерестно - то это уже в другой форум, вопрос к ПГ не имеет никакого отношения.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с повторением значения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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