From 728490d51fe76f53be97ad3a1334b888f2bf0fd0 Mon Sep 17 00:00:00 2001 From: H4CK3R-01 Date: Wed, 18 May 2022 21:30:11 +0200 Subject: [PATCH] Task #5 should mostly work now --- Lösung/Aufgabe 5.sql | 67 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/Lösung/Aufgabe 5.sql b/Lösung/Aufgabe 5.sql index d9bc380..f9fcf2e 100644 --- a/Lösung/Aufgabe 5.sql +++ b/Lösung/Aufgabe 5.sql @@ -39,7 +39,6 @@ FROM Menu GROUP BY Menuname); -# TODO Compare Menu_Naehrwerte.Allergene and Menu_Naehrwerte.Zusatzstoff with Allergie and Zusatzstoffunverträglichkeit DROP VIEW IF EXISTS Aufgabe_5; CREATE VIEW Aufgabe_5 AS ( @@ -47,14 +46,72 @@ SELECT Personenvorname, Personenname, Naehrwertziel, MN.Brennwert, - CONCAT(MN.Brennwert / Naehrwertziel * 100, '%') AS Naehrwertziel_Prozent, + CONCAT(ROUND(MN.Brennwert / Naehrwertziel * 100, 2), '%') AS Naehrwertziel_Prozent, MN.Fett, MN.Kohlenhydrate, MN.Eiweiss, IF(MN.Brennwert / Naehrwertziel * 100 <= 100, 'OK', 'Naehrwertziel überschritten') AS Naehrwert_OK, - M.Menuname, - Allergene, - Zusatzstoff + IF((SELECT COUNT(*) + FROM (SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(Allergene, ', ', n.digit + 1), ', ', -1) AS Allergen + FROM Menu_Naehrwerte + INNER JOIN + (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n + ON LENGTH(REPLACE(Allergene, ', ', '')) <= LENGTH(Allergene) - n.digit + WHERE Menuname = M.Menuname + UNION ALL + SELECT Allergenbezeichnung + FROM Allergie AS A20 + JOIN Allergen A10 on A20.AllergenID = A10.AllergenID + JOIN Person P10 on A20.PersonID = P10.PersonID + WHERE Personenname = P.Personenname) as u_all) = (SELECT COUNT(*) + FROM (SELECT DISTINCT SUBSTRING_INDEX( + SUBSTRING_INDEX(Allergene, ', ', n.digit + 1), + ', ', -1) AS Allergen + FROM Menu_Naehrwerte + INNER JOIN + (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n + ON LENGTH(REPLACE(Allergene, ', ', '')) <= LENGTH(Allergene) - n.digit + WHERE Menuname = M.Menuname + UNION + SELECT Allergenbezeichnung + FROM Allergie AS A20 + JOIN Allergen A10 on A20.AllergenID = A10.AllergenID + JOIN Person P10 on A20.PersonID = P10.PersonID + WHERE Personenname = P.Personenname) as u), + 'OK', + 'Allergenhaltiges Produkt konsumiert') AS 'Allergene_OK', + IF((SELECT COUNT(*) + FROM (SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(Zusatzstoff, ', ', n.digit + 1), ', ', + -1) AS Zusatzstoff + FROM Menu_Naehrwerte + INNER JOIN + (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n + ON LENGTH(REPLACE(Zusatzstoff, ', ', '')) <= LENGTH(Zusatzstoff) - n.digit + WHERE Menuname = M.Menuname + UNION ALL + SELECT Z.E_Nummer + FROM Zusatzstoffunvertraeglichkeit AS Z20 + JOIN Zusatzstoff Z on Z20.E_Nummer = Z.E_Nummer + JOIN Person P10 on Z20.PersonID = P10.PersonID + WHERE Personenname = P.Personenname) as u_all) = (SELECT COUNT(*) + FROM (SELECT DISTINCT SUBSTRING_INDEX( + SUBSTRING_INDEX(Zusatzstoff, ', ', n.digit + 1), + ', ', + -1) AS Zusatzstoff + FROM Menu_Naehrwerte + INNER JOIN + (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n + ON LENGTH(REPLACE(Zusatzstoff, ', ', '')) <= + LENGTH(Zusatzstoff) - n.digit + WHERE Menuname = M.Menuname + UNION + SELECT Z.E_Nummer + FROM Zusatzstoffunvertraeglichkeit AS Z20 + JOIN Zusatzstoff Z on Z20.E_Nummer = Z.E_Nummer + JOIN Person P10 on Z20.PersonID = P10.PersonID + WHERE Personenname = P.Personenname) as u), + 'OK', + 'Zusatzstoffhaltiges Produkt konsumiert') AS 'Zusatzstoff_OK' FROM konsumiert JOIN Menu M on M.MenuID = konsumiert.MenuID JOIN Person P on P.PersonID = konsumiert.PersonID