Имеем табличку users:
| user_id | какие-то поля |
Далее имеем табличку событий events:
| event_id | user_id REFERENCES users ("id") | time | какие-то поля |
То есть события поступают и записываются со ссылками на пользователя с
текущим временем.
теперь чтобы выбрать все события 25-го пользователя надо сказать
SELECT * FROM events WHERE user_id = 25;
А чтобы выбрать последнее событие 25-го пользователя надо сказать
SELECT * FROM events WHERE id = 25 ORDER BY time DESC LIMIT 1;
Далее потребовалось выводить список пользователей в одной колонке,
список последних их событий в другой.
Поскольку получаются подзапросы, то хочется завести табличку
last_events:
| user_id REFERENCES "users" ("user_id") | event_id REFERENCES "events" ("event_id") |
Теперь хочется чтобы эту табличку правила сама база.
CREATE RULE "event_insert" AS ON INSERT TO "events" DO ALSO
UPDATE
"last_events"
SET "event_id" = NEW."event_id"
WHERE "user_id" = NEW."user_id";
Вот, а тепрерь если попробовать добавить запись в events то получаем
исключение о том что поскольку event_id еще некорректный (транзакция
еще незавершена), то и стало быть запись не проходит.
Вопрос: как можно средствами БД заполнять табличку last_events?
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera@debian.org jabber://UNera@uvw.ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537