Mam takie zadanie do zrobienia ale nie wiem jak się za nie chwycić. Treść to w skrócie " Napisać procedurę identyfikującej bestsellery, czyli takiego typu książki, której egzemplarze są wypożyczane częściej niż dwa razy w miesiącu. Dalej takie wytyczne :
1.Napisz skrypt, który do tabeli BOOKS doda kolumnę BESTSELLER typu BOOLEAN. Kolumna ta będzie przyjmowała wartość true, jeżeli książka jest wypożyczana częściej niż dwa razy w miesiącu
2.Do skryptu dodaj procedurę UpdateBestsellers(), która zaktualizuje kolumnę BESTSELLER przy każdej książce w tabeli BOOKS na podstawie danych zawartych w tabeli RENTS. Użyj w tym celu kursora.
Kolumne do tabeli BOOKS już dodałem. Teraz myślenie mi się troche mija z celem. Nie rozumiem po co ma być ten skrypt ktory dodaje kolumne, skoro już sobie recznie taka dodałem. Wystarczy aby byla logika zawarta ktora identyfikuje ktora ksiazka jest wypozyczana w razy w miesiacu. I z tym mam problem nie wiem jak to sformułowac aby właściwą ilość ksiazek mi zwracało.
Z podpunktu 2 to wiem że musze użyć kursora i poiterowac po zbiorze. Mogłbym liczyć na jakąś pomoc. Załaczam tabele które mam aby łatwiej było łatwiej o rozeznanie.
Tabela Rents: https://scr.hu/Jjy1ZdA
I tabela Books w której kolumna bestseller ma być uzupełniona: https://scr.hu/Naw1Py3
A tutaj to co na razie mam taki pseudo szablon na którym sie wzorowałem jak napisać kursor. To wszystko co mam.
DROP PROCEDURE IF EXISTS UpdateBestsellers;
DELIMITER $$
CREATE PROCEDURE UpdateBestsellers()
BEGIN
DECLARE BK_ID INT;
DECLARE ALL_BESTSELLERS CURSOR FOR SELECT BOOK_ID FROM RENTS;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 1;
OPEN ALL_BESTSELLERS;
WHILE (FINSIHED = 0) DO
FETCH ALL_BOOKS INTO BK_ID;
IF(FINISHED = 0) THEN
END IF;
END WHILE;
CLOSE ALL_BESTSELLERS;
END $$
DELIMITER ;
Aha i mentor zaproponował mi coś takiego ale kompletnie nie wiem jak to wpasować ;/ :
declare ALL_BESTSELLERS cursor for select book_id from rents t group by EXTRACT( YEAR_MONTH FROM rent_date),book_id having count(*) > 2 ;