powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать триггер ?
4 сообщений из 4, страница 1 из 1
Как сделать триггер ?
    #33467465
Alekcei_dvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 3 таблицы :
ТАБЛИЦА 2_1. ПОДПИСЧИКИ
• Код подписчика
• ФИО
• Населенный пункт
• почтовый индекс

ТАБЛИЦА 2_2. ИЗДАHИЯ
• код издания
• название
• цена за месяц(обычная)
• цена за месяц(льготная)
• тираж
• Число подписчиков (связать с таблицей Подписка)
• тип издания (жуpнал, газета, ...)
• ФИО редактора

ТАБЛИЦА 2.3. ПОДПИСКА
• код подписчика
• код издания
• дата подписки
• на сколько месяцев
• признак льготы
Как при помощи триггеров установить связь между полем «Число подписчиков» и Таблицей «Подписка» ?
...
Рейтинг: 0 / 0
Как сделать триггер ?
    #33467555
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alekcei_dvoКак при помощи триггеров установить связь между полем «Число подписчиков» и Таблицей «Подписка» ?
Никак.

Триггер не может "установить связь". Он не для этого предназначен.

Триггер - это некоторая процедура, которая запускается при наступлении определенного события.

Если имеется в виду, что при создании/удалении/модификации записей в таблице "Подписка" должно меняться значение в соответствующем поле таблицы "Издания", то, в принципе, ничего особо сложного.

Триггер всегда выполняется для одной записи за раз. Т.е. если даже используется некая групповая команда на вставку или модификацию, физически всегда будет происходить модификация по одной записи за раз.

Поэтому, надо просто увеличить на 1 значение при вставке записи, уменьшить на 1 при удалении и сделать и то и другое при модификации (вместо одного издания подписались на другое).

Это можно сделать командой UPDATE-SQL.

Общую часть почитай здесь

Триггер
...
Рейтинг: 0 / 0
Как сделать триггер ?
    #33467579
Alekcei_dvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, пока без него попробую :)
Нужно для это БД составить запрос :
Найти и вывести список названий журналов согласно условию:
на них подписались все подписчики
Как это сделать ?
Я написал, но он почему то выводит все названия журнало ?
SELECT izd.izd_name;
FROM db!izd, db!pod;
WHERE izd_type='j';
AND reccount(pod.pod_id) = ( SELECT count(*) ;
FROM db!podpsk, db!izd ;
WHERE izd.izd_id = podpsk.izd_id );
INTO TABLE q2_tbl

report form q2_rprt preview
...
Рейтинг: 0 / 0
Как сделать триггер ?
    #33467757
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае, Reccount() вернет не то, что нужно. Даже если не обращать внимания, что ты в качестве параметра указал непонятно что, но Reccount() учитывает в том числе и записи помеченные как удаленные.

Это значит, что количество подписчиков надо подсчитывать отдельно. Отдельным запросом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
* Количество записей в таблице Подписчики
LOCAL laCount( 1 )
SELECT COUNT(*) FROM db!pod INTO ARRAY laCount

* Журналы, на которые подписались ВСЕ Подписчики
SELECT izd.* ;
INTO TABLE q2_tbl ;
FROM db!izd ;
WHERE izd.izd_id IN ;
	(SELECT podpsk.izd_id ;
	FROM db!podpsk ;
	GROUP BY podpsk.izd_id ;
	HAVING COUNT(DISTINCT podpsk.pod_id) = laCount)

Смысл в том, что из таблицы ПОДПИСКА отбираются только те коды журналов, которым соответствует количество уникальных подписчиков равных общему количеству подписчиков.

Я исхожу из предположения, что один и тот же подписчик может подписаться несколько раз на один и тот же журнал. Отсюда COUNT(DISTINCT ...), чтобы подсчитать именно уникальные значения кодов подписчиков
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать триггер ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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