Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105

Автоматическая подстановка count при добавлении/удалении записи

02.05.2020, 05:59. Показов 1326. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, ув.Форумчане!)

Сел изучать SQL (Postgre в частности)...
У меня очень (оооооочень) сложный вопрос ():
Каким образом можно при insert/update/delete в одной таблице поменять значение поля в другой?)
Подробности:
Кликните здесь для просмотра всего текста

З.Ы. Лучей добра тебе, если заглянул сюда))

Есть 2 таблички: (А во вложении еще и графическое представление)
SQL
1
2
3
4
5
6
7
CREATE TABLE "public"."Groups" (
  "ID_Group" VARCHAR(10) COLLATE "pg_catalog"."default" NOT NULL,
  "StudentsCount" int2,
  "Course" int2,
  "Curator" int8,
  "ID_Department" int2,
CONSTRAINT "Groups_pkey" PRIMARY KEY ("ID_Group"));
и
SQL
1
2
3
4
5
6
7
8
CREATE TABLE "public"."Students" (
  "ID_Student" int8 NOT NULL DEFAULT NEXTVAL('"Students_ID_Student_seq"'::regclass),
  "ID_Passport" int4,
  "EntryDate" DATE,
  "FIO" VARCHAR(255) COLLATE "pg_catalog"."default",
  "ID_Group" VARCHAR(10) COLLATE "pg_catalog"."default",
  CONSTRAINT "Students_pkey" PRIMARY KEY ("ID_Student"),
  CONSTRAINT "FK_ID_Group" FOREIGN KEY ("ID_Group") REFERENCES "public"."Groups" ("ID_Group") ON DELETE RESTRICT ON UPDATE RESTRICT,);
Ну и следовательно, при добавлении/удалении строк в Students, должно обновляться Groups.StudentsCount где Groups.ID_Group = Students.ID_Group(Для троки, которую добавили/удалили/изменили).

Сел за триггеры - при создании наткнулся вообще на функции/процедуры.
Мол, при создании триггера нужно указать функцию, которую он будет "дёргать".
А оно вообще нужно? Или можно обычным триггером как-то обойтись?
Подскажите, если не сложно, как это правильно выполняется)
Миниатюры
Автоматическая подстановка count при добавлении/удалении записи  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2020, 05:59
Ответы с готовыми решениями:

Подстановка значений в поле формы при добавлении записи
Добрый день. Есть 2 таблицы: "Клиенты" и "Заказы". Связь 1 ко многим. При добавлении нового клиента, код клиента проставляется...

Автоматическая вставка номеров при добавлении записи
Добрый день! Подскажите, пожалуйста, как для новичка решение следующего вопроса. При добавлении новой записи в базу Access нужно в...

Автоматическая подстановка при импорте из Excel
Здравствуйте! Возник вопрос: можно ли при импорте из Excel каким-то образом автоматически обновлять уже существующие таблицы, делая не...

2
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
02.05.2020, 12:00
Что значит обычный триггер. Триггер - это триггер, при возникновении условий триггера, он дерагет выполнение определенной, написанной Вами, процедуры. Поэтому для триггера нужна триггерная процедура.
Все детали написания здесь.
1
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
15.05.2020, 02:29  [ТС]
grgdvo, Спасибо за наводку, честно, даже забыл посмотреть что ответили
Сделал в итоге таким образом (Достаточно чопорно и "в лоб" ):
Кликните здесь для просмотра всего текста

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
CREATE OR REPLACE FUNCTION "public"."students_count"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
BEGIN
    IF
        ( TG_OP = 'DELETE' ) THEN
            UPDATE "public"."Groups" SET "StudentsCount" = ( SELECT COUNT ( * ) FROM "public"."Students" 
            WHERE "Students"."ID_Group" = OLD."ID_Group" ) 
        WHERE "Groups"."ID_Group" = OLD."ID_Group";
        RETURN OLD;
        
    ELSEIF ( TG_OP = 'INSERT' ) THEN
        UPDATE "public"."Groups" SET "StudentsCount" = ( SELECT COUNT ( * ) FROM "public"."Students" 
            WHERE "Students"."ID_Group" = NEW."ID_Group" ) 
        WHERE "Groups"."ID_Group" = NEW."ID_Group";
        RETURN NEW;
    ELSIF ( TG_OP = 'UPDATE' ) THEN
        UPDATE "public"."Groups" SET "StudentsCount" = ( SELECT COUNT ( * ) FROM "public"."Students"
            WHERE "Students"."ID_Group" = OLD."ID_Group" ) 
        WHERE "Groups"."ID_Group" = OLD."ID_Group";
        
        UPDATE "public"."Groups" SET "StudentsCount" = ( SELECT COUNT ( * ) FROM "public"."Students"
            WHERE "Students"."ID_Group" = NEW."ID_Group" ) 
        WHERE "Groups"."ID_Group" = NEW."ID_Group";
        RETURN NEW;
                
    END IF;
    RETURN NULL;
            
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
 
CREATE TRIGGER "count_students_number" AFTER INSERT OR UPDATE OR DELETE ON "public"."Students"
FOR EACH ROW
EXECUTE PROCEDURE "public"."students_count"();
 
COMMENT ON TRIGGER "count_students_number" ON "public"."Students" IS 'Автоматический подсчет количества студентов в группе';


Если не сложно, могу попросить подсказать насколько правильное решение и можно ли это сделать проще и лаконичней?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2020, 02:29
Помогаю со студенческими работами здесь

Обнулить счетчик при удалении-добавлении
Здравствуйте! Сам новенький в Firebird. При удалении-добавлении записей, в таблице firebird, поле ID идет по счетчику от последнего...

Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
Я только начинаю изучать ASP.NET и связанные с ним технологии, поэтому буду очень признателен за любую конструктивную критику с...

Mssql - как асинхронно узнать о добавлении или удалении записи
Уважаемые Гуру! Подскажите, как можно асинхронно узнать о факте добавления или удаления записи. Есть задача написать сервис , который...

Ошибка при добавлении и удалении
В чем ошибка? при добавлении студента у меня фамилия пишется в поле номера зачётки, а номер зачётки в фамилии....также проблема с...

Автоматическая подстановка цены при выборе товара.
Здравствуйте. у меня такой вопрос:как сделать чтобы цена отображалась автоматически при выборе товара?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru