[mysql] Triggery i funkcje

0

Na początek - struktura bazy danych:

CREATE TABLE `zdjecia` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `zdjecie` MEDIUMBLOB NOT NULL,
  `czas` DATETIME,
  PRIMARY KEY  (`id`)
) 

CREATE TABLE `views` (
  `photo` INT FOREIGN KEY (zdjecia.id)
  `date` DATETIME
)

W założeniu - w tabeli zdjecia przechowujemy... zdjęcia :). W tabeli views przechowujemy "logi" - za każdym razem, gdy któreś zdjęcie jest wyświetlane, wprowadzamy tam wpis, które zdjęcie i kiedy.

Na chwilę obecną - realizowane to jest z poziomu PHP - za każdym razem, gdy wykonuję

SELECT zdjecie FROM zdjecia WHERE id=$id

wykonuję także:

INSERT INTO zdjecia(photo,date) VALUES ($id, NOW()

Zasadniczo - wszystko działa. Ale:

  1. Chciałbym, aby dodawanie logów odbywało się po stronie BD, a nie po stronie aplikacji klienta.

Napisałem więc sobie funkcję:

CREATE FUNCTION pobierz_zdjecie (myid INT) RETURNS MEDIUMBLOB
BEGIN 
INSERT INTO logs(photo, date) VALUES (myid, NOW())
return SELECT zdjecie FROM zdjecia WHERE id=myid
END

Funkcja raczej nie zawiera błędów, bo została przyjęta przez BD. Jednak przy próbie jej wywołania:

SELECT pobierz_zdjecie(10)

wyświetlany jest błąd. Może mnie ktoś oświecić?

  1. Czynność jak powyżej - czy dodawanie tych logów dałoby się zrobić przy pomocy triggerów? Nie mam na ten temat zielonego pojęcia, a nigdzie w sieci nie znalazłem przykładu triggera ustawionego na zapytanie SELECT.

  2. Mając dane o tym, które zdjęcie zostało kiedy wyświetlone - chciałbym, aby zdjęcie, które nie było wyświetlane w ciągu ostatnich 10 dni było automatycznie usuwane. Wiem, jak napisać zapytanie, które usunie zdjęcie, które nie było wyświetlane w ciągu ostatnich 10 dni - nie wiem jednak, co zrobić, żeby takie zapytanie było okresowo automatycznie wywoływane.

Dziękuję za pomoc.

0

zwracasz nie pojedyńczy element tylko select

BTW stwierdzenie

wyświetlany jest błąd
niewiele mówi...

0

Przepraszam za zawracanie głowy, już działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1