powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вставка через...
18 сообщений из 18, страница 1 из 1
Вставка через...
    #32642078
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поможите если можите! Есть две таблицы(например table1 и table2), интересующие поля в которых EQ_ID, Manufacturer в первой и Man_id, Shortname во второй. Есть форма в которой пользователь выбирает наименование продукции и Shortname производителя. Надо чтобы при вставке из формы в первую таблицу вставлялось значение поля Man_id соответствующее Shortname, а во вторую не вставлялось вообще ничего. (Вставка идет через view я вляющееся объединением этих двух таблиц) Написал rule:
ON INSERT TO table1 DO INSTEAD INSERT INTO table2 SELECT man_id FROM table2 WHERE shortname = new.shortname но чего-то не работает видимо я не очень понял работу NEW, а может чего ещЁ-))). Заранеее спасибо.
...
Рейтинг: 0 / 0
Вставка через...
    #32642106
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вставка через view, то почему правило висит на table1?..
...
Рейтинг: 0 / 0
Вставка через...
    #32642265
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Звиняйте, очепятка вышла. Оно действительно на view
...
Рейтинг: 0 / 0
Вставка через...
    #32642383
vadimm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cколько ни пытался, ничего хорошего с rule у меня не получилось, не понимает он new i old.
Сделай то же на trigger before post и всё будет OK.
...
Рейтинг: 0 / 0
Вставка через...
    #32642563
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пользовался еще триггерами, если можно поподробнее объясни
...
Рейтинг: 0 / 0
Вставка через...
    #32643555
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASPU1Звиняйте, очепятка вышла. Оно действительно на view
Ну, сделай над собой усилие, приведи реальный код, а не краткое его изложение.


vadimmCколько ни пытался, ничего хорошего с rule у меня не получилось, не понимает он new i old.

как бы это помягше... не вводи людей в заблуждение.
...
Рейтинг: 0 / 0
Вставка через...
    #32643569
vadimm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спорить не буду, может и не прав, пример сейчас не вспомню, но трабла была.
И, как говорится, зуб теперь на rules имею, но надо будет ещё раз попробовать как-нибудь.
...
Рейтинг: 0 / 0
Вставка через...
    #32646351
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sad SpiritНу, сделай над собой усилие, приведи реальный код, а не краткое его изложение.
Извини,Печальный, но что ты подразумеваешь под реальным кодом? Правило приведено реально, без цензуры и сокращений.
...
Рейтинг: 0 / 0
Вставка через...
    #32648598
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASPU1 Написал rule:
ON INSERT TO table1 DO INSTEAD INSERT INTO table2 SELECT man_id FROM table2 WHERE shortname = new.shortname

ASPU1Оно действительно на view

А подумать?

__
Вот примерно так вешается руле НА вид, обозванный "tree_leaf"
:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE OR REPLACE RULE "_INSERT" AS
  ON INSERT TO tree_leaf DO INSTEAD
 (INSERT INTO tree 
	(id,
	 pid,
	 )
  VALUES 
	(new.id,
	 new.pid,
	 );
 INSERT INTO leaf 
	(id, 
	date,
	name,
	description,
	value,
	)
 VALUES (
	new.id,
	new.name,
	new.description,
	new.value,
	);
  ); 
...
Рейтинг: 0 / 0
Вставка через...
    #32648897
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДА! Оно действительно на вью висит и в такой форме как ты приводишь обязательно бы работало,НО требуется выполнение дополнительного условия и именно ЭТО не получается. Причем если значение поля shortname фактически вставляется, то все тоже работает, но надо сделать так чтобы оно выбиралось но не вставлялось. УХ. Изврат конечно но как это реализовать попроще не придумал.
...
Рейтинг: 0 / 0
Вставка через...
    #32649075
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"ОНО" висит на TO table1

Вот разве что table1 и есть это "вью", но, исходя из текста первого твоего поста это не так.


Если прочитать твой первый пост, то поставленная тобой задача и текст вью не стыкуется никоим разом. (надо вставить что-то в 1-ю, а втавляешь что-то во вторую... вешаешь рулю на таблицу, а не на вью, и прочая х.йня..., уже и букв нематерных не хватает)

И вообще, очень похоже что вопрошающий - попросту бот. (Логики никакой).

Приведи текст самого вью. И текст руле на инсерт _В НЕГО_.
...
Рейтинг: 0 / 0
Вставка через...
    #32650456
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже что бот как раз отвечающий, хотя и знает много матерных букв. Извинился же, сказал ОПЕЧАТКА. Правило висит на VIEW, которое получено соединением таблиц table1 и table2. Требуется вставить в table1 значение id, которое соответствует задаваемому пользователем shortname (чтоб о не цифири какие-то из списка выбирал, а конкретно по названию), но при этом сам shortname в table2 вставлять не надо чтобы не было дублирования. Как понятнее написать не знаю.
...
Рейтинг: 0 / 0
Вставка через...
    #32650581
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASPU1Как понятнее написать не знаю.
Понятнее будет на SQL.
...
Рейтинг: 0 / 0
Вставка через...
    #32650626
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, давай по частям

ASPU1Поможите если можите! Есть две таблицы(например table1 и table2), интересующие поля в которых EQ_ID, Manufacturer в первой и Man_id, Shortname во второй. Есть форма в которой пользователь выбирает наименование продукции и Shortname производителя. Надо чтобы при вставке из формы в первую таблицу вставлялось значение поля Man_id соответствующее Shortname, а во вторую не вставлялось вообще ничего. (Вставка идет через view я вляющееся объединением этих двух таблиц).
Во первых никакого вью для подстановки из справочника не нужно, а нужен компонент (комбо) с источником строк из 2-й таблицы, а данными - из перовй, т.е. и форму и поля достаточно построить на основе только 1-й...

ну, да ладно, решаем как предлагается автором -
считаем, что у тебя есть вью наподобие:
Код: plaintext
1.
2.
3.
CREATE OR REPLACE VIEW view1 AS 
SELECT * FROM
table1 INNER JOIN table2 ON table1.Man_id = table2.Man_id
ASPU1 Надо чтобы при вставке из формы в первую таблицу вставлялось значение поля Man_id соответствующее Shortname, а во вторую не вставлялось вообще ничего. (Вставка идет через view я вляющееся объединением этих двух таблиц).

пишем именно то, что у тебя написано в тексте "правило для в1" - "вставить в т1 значение т2"

Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE RULE "_INSERT" AS
  ON INSERT TO view1 DO INSTEAD
  INSERT INTO table1 (man_id, f1,...,fN)
  SELECT man_id, new.f1,...,new.fN
   FROM table2
   WHERE shortname = NEW.shortname
(видимо там, в NEW, есть еще поля для вставки, а не токмо man_id)

а не "правило для т1" - "вставить в т2 значение т2", как пишешь ты
ASPU1
ON INSERT TO table1 DO INSTEAD INSERT INTO table2 SELECT man_id FROM table2 WHERE shortname = new.shortname


а бот и должен отвечать. а отличается тем, что отвечая должен не думать. Что и имеет место быть. :о)
...
Рейтинг: 0 / 0
Вставка через...
    #32651053
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sad Spirit ASPU1Как понятнее написать не знаю.
Понятнее будет на SQL.
Извиняюсь, что не написал оригинал сразу, просто та машина на которой это все делается не имеет выхода в и-нет и в локалку, поэтому писал по памяти.
Итак как все это есть на самом деле:
SELECT eq_id, iscomplex, number, name, man_id, shortname, fullname, address FROM (equipment JOIN manufacturer ON ((equipment.manufacturer = manufacturer.man_id))); Это view1 на котором и висит правило.
CREATE RULE ins_rul AS ON INSERT TO view1 DO INSTEAD INSERT INTO equipment (name, number, iscomplex, manufacturer) VALUES (new.name, new.number, new.iscomplex, (SELECT manufacturer.man_id FROM manufacturer WHERE (manufacturer.shortname = new.shortname))); Это текст руля.
Таблицы: equipment(eq_id, iscomplex, number, name, manufacturer) и manufacturer(man_id, shortname, name, address). В скобках указаны столбцы.
...
Рейтинг: 0 / 0
Вставка через...
    #32652309
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1/ Во первых ты наврал с текстом view1 (если у тебя действительно именно так обзываются поля в таблицах) - придется писать что-то наподобие:
Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE VIEW view1 AS 
SELECT eq_id, iscomplex, number,
 equipment.name, man_id, shortname,
 manufacturer.name AS fullname, address 
 FROM (equipment JOIN manufacturer ON ((equipment.manufacturer = manufacturer.man_id)));
т.к. (name - в 2-х таблицах, fullname - отсутствует в таблах как класс). Т.ч. темнишь, как лев давыдович, т.ч. даже отвечать не хоца.

2/ но если это все опять "о-пи.чатка", то сделай просто тест:
Код: plaintext
1.
INSERT INTO view1(eq_id, iscomplex, number, name,  shortname)
VALUES ( 1 ,  0 ,  0 , 'ASSA','assa');
где 'assa' - некий тектс, уже имеющийся в manufacturer.shortname. Даже твой view1 отработает на ура (если констрайнты позволят). Т.ч. (в случае если ты не обманывашь, а обманывашься сам с текстами вью и полями), придется смотреть клиента - что же он тебе просылает, собственно. И если потребуется - писать еще и рулю на апдейт (аналогично)
...
Рейтинг: 0 / 0
Вставка через...
    #32652403
ASPU1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, можешь не верить, но это все от спешки. Видит БГ темнить не пытаюсь, но концентрируясь на объяснении желаемого почему-то забываются мелочи:-((
В таблице manufacturer действительно нет поля name, а есть fullname. Простой INSERT в это view не прокатывает поэтому и пишу рулю. Суть в том что в поле shortname вставлять НИЧЕГО не надо. НАДО вставлять в поле manufacturer таблицы equipment значение manufacturer.man_id, соответсвующее указываемому пользователем shortname.
З.Ы. Самая сложная штука в жизни - взаимопонимание;-)
...
Рейтинг: 0 / 0
Вставка через...
    #32653099
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ерш твою медь. Ты запрос на вставку ВО ВЬЮ, приведенный выше запускал?

2/ но если это все опять "о-пи.чатка", то сделай просто тест:
INSERT INTO view1(eq_id, iscomplex, number, name, shortname)
VALUES (1, 0, 0, 'ASSA','assa');

и накласть на то, что надо, что не надо. этим запросом ты формируешь твое NEW (для руле). А уж оно разбирается, что там ему надо, что нет.


ЗЫ: Понимание сложно, когда бестолковка в игноре. Вот если ее слегка сморщить, глядишь и получится.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вставка через...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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