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:
- 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ć?
-
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.
-
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.