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

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

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

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

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

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

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

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

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

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

Триггер
...
Рейтинг: 0 / 0
03.01.2006, 18:25
    #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
03.01.2006, 23:27
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сделать триггер ? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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