Salve a tutti ho fatto una procedura per inserimento di dati in una tabella che non fa nulla.
la procedura è questa :
DELIMITER //
CREATE PROCEDURE raccomandazione_contenuti(IN CodiceAlfanumerico VARCHAR(255))
BEGIN
-- Memorizza le preferenze dell'utente nelle variabili
DECLARE generePreferito INT;
DECLARE registaPreferito INT;
DECLARE attorePreferito INT;
SELECT GenereID INTO generePreferito FROM preferenzeutentegeneri WHERE UtenteID = CodiceAlfanumerico LIMIT 1;
SELECT RegistaID INTO registaPreferito FROM preferenzeutenteregisti WHERE UtenteID = CodiceAlfanumerico LIMIT 1;
SELECT AttoreID INTO attorePreferito FROM preferenzeutenteattori WHERE UtenteID = CodiceAlfanumerico LIMIT 1;
-- Raccomanda film dell'ultimo anno che non sono stati visti dall'utente
INSERT INTO FilmRaccomandati (ID, UtenteID, Genere, Regista, AttorePrincipale, AnnoProduzione, RatingMedia)
SELECT
DISTINCT f.ID,
CodiceAlfanumerico,
(SELECT g.Nome FROM film_genere fg JOIN Genere g ON fg.ID_Genere = g.ID WHERE fg.ID_Film = f.ID LIMIT 1) AS Genere,
(SELECT r.Nome FROM film_regista fr JOIN Regista r ON fr.ID_Regista = r.ID WHERE fr.ID_Film = f.ID LIMIT 1) AS Regista,
(SELECT a.Nome FROM film_attore fa JOIN Attore a ON fa.ID_Attore = a.ID WHERE fa.ID_Film = f.ID LIMIT 1) AS AttorePrincipale,
f.Anno_Produzione,
(f.ratingUtente + f.ratingCritico) / 2 AS RatingMedia
FROM
Film f
WHERE
f.Anno_Produzione >= YEAR(CURRENT_DATE) - 1 AND
f.ID NOT IN (SELECT FilmID FROM HistoryVisualizzazioni WHERE UtenteID = CodiceAlfanumerico) AND
(generePreferito IS NULL OR f.ID IN (SELECT ID_Film FROM film_genere WHERE ID_Genere = generePreferito)) AND
(registaPreferito IS NULL OR f.ID IN (SELECT ID_Film FROM film_regista WHERE ID_Regista = registaPreferito)) AND
(attorePreferito IS NULL OR f.ID IN (SELECT ID_Film FROM film_attore WHERE ID_Attore = attorePreferito))
ORDER BY
CASE
WHEN generePreferito IS NOT NULL AND f.ID IN (SELECT ID_Film FROM film_genere WHERE ID_Genere = generePreferito) THEN 1
ELSE 0
END +
CASE
WHEN registaPreferito IS NOT NULL AND f.ID IN (SELECT ID_Film FROM film_regista WHERE ID_Regista = registaPreferito) THEN 1
ELSE 0
END +
CASE
WHEN attorePreferito IS NOT NULL AND f.ID IN (SELECT ID_Film FROM film_attore WHERE ID_Attore = attorePreferito) THEN 1
ELSE 0
END DESC,
(f.ratingUtente + f.ratingCritico) / 2 DESC
LIMIT 10;
END //
DELIMITER ;
e le tabelle e colonne interessate sono queste :
CREATE TABLE Utenti ( CodiceAlfanumerico VARCHAR(255) PRIMARY KEY, Nome VARCHAR(255), Cognome VARCHAR(255),
CREATE TABLE HistoryVisualizzazioni ( ID INT PRIMARY KEY, UtenteID VARCHAR(255), FilmID INT, DataVisualizzazione DATE, FOREIGN KEY (UtenteID) REFERENCES Utenti(CodiceAlfanumerico), FOREIGN KEY (FilmID) REFERENCES Film(ID) );
CREATE TABLE FilmRaccomandati ( ID INT PRIMARY KEY, UtenteID VARCHAR(255), Genere VARCHAR(255), Regista VARCHAR(255), AttorePrincipale VARCHAR(255), AnnoProduzione INT, RatingMedia DECIMAL(3, 1), FOREIGN KEY (UtenteID) REFERENCES Utenti(CodiceAlfanumerico), FOREIGN KEY (ID) REFERENCES Film(ID) );
le colonne della tabella film : ID, Titolo, Descrizione, Durata, Anno_Produzione, Nazione_Produzione, Id_regista, ratingUtente, ratingCritico
le colonne della tabella genere: ID, Nome
le colonne della tabella film_genere :ID_Film, ID_Genere
le colonne della tabelle preferenzeutentegeneri : ID, UtenteID, GenereID
le colonne della tabella preferenzeutenteattori : ID, UtenteID, AttoreID
le colonne della tabella preferenzeutenteregisti : ID, UtenteID, RegistaID
le colonne della tabella regista :ID, Nome, Cognome
le colonne della tabella film_regista :ID_Film, ID_Regista
le colonne della tabella film_attore : ID_Film, ID_Attore
le colonne della tabella attore :ID, Nome, Cognome
C'è qualcuno che può darmi una mano ?
Grazie