Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вставка через... / 18 сообщений из 18, страница 1 из 1
10.08.2004, 10:00
    #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
10.08.2004, 10:15
    #32642106
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
если вставка через view, то почему правило висит на table1?..
...
Рейтинг: 0 / 0
10.08.2004, 11:23
    #32642265
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Звиняйте, очепятка вышла. Оно действительно на view
...
Рейтинг: 0 / 0
10.08.2004, 12:06
    #32642383
vadimm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Cколько ни пытался, ничего хорошего с rule у меня не получилось, не понимает он new i old.
Сделай то же на trigger before post и всё будет OK.
...
Рейтинг: 0 / 0
10.08.2004, 13:18
    #32642563
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Не пользовался еще триггерами, если можно поподробнее объясни
...
Рейтинг: 0 / 0
10.08.2004, 23:19
    #32643555
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
ASPU1Звиняйте, очепятка вышла. Оно действительно на view
Ну, сделай над собой усилие, приведи реальный код, а не краткое его изложение.


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

как бы это помягше... не вводи людей в заблуждение.
...
Рейтинг: 0 / 0
10.08.2004, 23:39
    #32643569
vadimm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Спорить не буду, может и не прав, пример сейчас не вспомню, но трабла была.
И, как говорится, зуб теперь на rules имею, но надо будет ещё раз попробовать как-нибудь.
...
Рейтинг: 0 / 0
12.08.2004, 12:35
    #32646351
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Sad SpiritНу, сделай над собой усилие, приведи реальный код, а не краткое его изложение.
Извини,Печальный, но что ты подразумеваешь под реальным кодом? Правило приведено реально, без цензуры и сокращений.
...
Рейтинг: 0 / 0
13.08.2004, 13:03
    #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
13.08.2004, 14:56
    #32648897
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
ДА! Оно действительно на вью висит и в такой форме как ты приводишь обязательно бы работало,НО требуется выполнение дополнительного условия и именно ЭТО не получается. Причем если значение поля shortname фактически вставляется, то все тоже работает, но надо сделать так чтобы оно выбиралось но не вставлялось. УХ. Изврат конечно но как это реализовать попроще не придумал.
...
Рейтинг: 0 / 0
13.08.2004, 15:59
    #32649075
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
"ОНО" висит на TO table1

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


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

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

Приведи текст самого вью. И текст руле на инсерт _В НЕГО_.
...
Рейтинг: 0 / 0
16.08.2004, 11:04
    #32650456
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Похоже что бот как раз отвечающий, хотя и знает много матерных букв. Извинился же, сказал ОПЕЧАТКА. Правило висит на VIEW, которое получено соединением таблиц table1 и table2. Требуется вставить в table1 значение id, которое соответствует задаваемому пользователем shortname (чтоб о не цифири какие-то из списка выбирал, а конкретно по названию), но при этом сам shortname в table2 вставлять не надо чтобы не было дублирования. Как понятнее написать не знаю.
...
Рейтинг: 0 / 0
16.08.2004, 11:56
    #32650581
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
ASPU1Как понятнее написать не знаю.
Понятнее будет на SQL.
...
Рейтинг: 0 / 0
16.08.2004, 12:09
    #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
16.08.2004, 14:52
    #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
17.08.2004, 11:12
    #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
17.08.2004, 11:51
    #32652403
ASPU1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
Блин, можешь не верить, но это все от спешки. Видит БГ темнить не пытаюсь, но концентрируясь на объяснении желаемого почему-то забываются мелочи:-((
В таблице manufacturer действительно нет поля name, а есть fullname. Простой INSERT в это view не прокатывает поэтому и пишу рулю. Суть в том что в поле shortname вставлять НИЧЕГО не надо. НАДО вставлять в поле manufacturer таблицы equipment значение manufacturer.man_id, соответсвующее указываемому пользователем shortname.
З.Ы. Самая сложная штука в жизни - взаимопонимание;-)
...
Рейтинг: 0 / 0
17.08.2004, 15:27
    #32653099
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка через...
ерш твою медь. Ты запрос на вставку ВО ВЬЮ, приведенный выше запускал?

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

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


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


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