Commit d5d49bbb authored by M1888's avatar M1888

trigger-säätö

parent 1c01b1d6
No preview for this file type
File added
......@@ -49,7 +49,7 @@ Kun ottelut oli saatu lisättyä, oli aika lähteä työstämään erilaisia kys
Näin saatiinkin aikaiseksi kätevät pistepörssit joukkueille ja pelaajille, sekä statistiikkaa jäähyminuuteista.
```SQL
mysql> SELECT * FROM Pisteporssi;
mysql> SELECT * FROM Pisteporssi ORDER BY pts DESC;
+------------+--------+-------------+-----+
| pelaaja_id | enimi | snimi | pts |
+------------+--------+-------------+-----+
......@@ -96,7 +96,7 @@ mysql> SELECT * FROM Voittajat;
+-----------+------------+---------+--------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM Pisteporssi_joukkue;
mysql> SELECT * FROM Pisteporssi_joukkue ORDER BY pts DESC;
+---------+-----+
| nimi | pts |
+---------+-----+
......@@ -106,7 +106,7 @@ mysql> SELECT * FROM Pisteporssi_joukkue;
+---------+-----+
3 rows in set (0.01 sec)
mysql> SELECT * FROM Jaahyt_pelaajat;
mysql> SELECT * FROM Jaahyt_pelaajat ORDER BY minuutit DESC;
+------------+----------+-------------+----------+
| pelaaja_id | enimi | snimi | minuutit |
+------------+----------+-------------+----------+
......@@ -127,7 +127,7 @@ mysql> SELECT * FROM Jaahyt_pelaajat;
+------------+----------+-------------+----------+
14 rows in set (0.01 sec)
mysql> SELECT * FROM Jaahyt_joukkue;
mysql> SELECT * FROM Jaahyt_joukkue ORDER BY minuutit DESC;
+---------+----------+
| nimi | minuutit |
+---------+----------+
......
......@@ -252,6 +252,10 @@ CREATE TABLE IF NOT EXISTS `M1888`.`ottelutapahtuma` (
REFERENCES `M1888`.`maali` (`maali_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
-- Tässä tarkistetaan, että aikalisä, rankkari, jäähy ja maali _id:stä
-- on asetettu yksi ja vain ja ainoastaan se yksi.
-- Toimisi, jos MySQL tukisi CHECK-lausetta...
CONSTRAINT `CK_tapahtumaid` CHECK (
CASE WHEN aikalisa_id IS NULL THEN 0 ELSE 1 END +
CASE WHEN jaahy_id IS NULL THEN 0 ELSE 1 END +
......@@ -259,6 +263,45 @@ CREATE TABLE IF NOT EXISTS `M1888`.`ottelutapahtuma` (
CASE WHEN maali_id IS NULL THEN 0 ELSE 1 END = 1))
ENGINE = InnoDB;
-- -------------------------
-- Loppuun omia triggereitä
-- -------------------------
-- Sama trigger, kun ylempi constraint. Vaan ei toimi tämäkään.
DELIMITER //
CREATE TRIGGER `vain_yksi_tapahtuma_ins` BEFORE INSERT ON `ottelutapahtuma`
FOR EACH ROW
BEGIN
DECLARE count integer;
SET @count = 0;
IF new.aikalisa_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.jaahy_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.rankkari_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.maali_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF @count != 1 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'ottelutapahtuma check failed';
END IF;
END//
DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
......
......@@ -17,8 +17,7 @@ CREATE VIEW Pisteporssi AS
FROM maali AS m
INNER JOIN pelaaja AS p
ON (p.pelaaja_id = m.pelaaja_id OR p.pelaaja_id = m.syottaja_id)
GROUP BY p.pelaaja_id
ORDER BY pts DESC;
GROUP BY p.pelaaja_id;
-- Joukkueiden tekemät maalit (apunäkymä seuraavalle)
CREATE VIEW Joukkue_maalit AS
......@@ -52,12 +51,11 @@ CREATE VIEW Pisteporssi_joukkue AS
nimi,
COUNT(nimi) AS pts
FROM Voittajat
GROUP BY nimi
ORDER BY pts;
GROUP BY nimi;
-- Jäähyminuutit:
-- Pelaajat, jotka ovat keränneet eniten jäähyminuutteja
-- Jäähyt pelaajittain minuutteina
CREATE VIEW Jaahyt_pelaajat AS
SELECT
......@@ -68,8 +66,7 @@ CREATE VIEW Jaahyt_pelaajat AS
FROM jaahy AS j
INNER JOIN pelaaja AS p
ON p.pelaaja_id = j.pelaaja_id
GROUP BY pelaaja_id
ORDER BY minuutit DESC;
GROUP BY pelaaja_id;
-- Jäähyminuutit joukkueittain
CREATE VIEW Jaahyt_joukkue AS
......@@ -83,6 +80,5 @@ CREATE VIEW Jaahyt_joukkue AS
ON p.pelaaja_id = s.pelaaja_id
INNER JOIN joukkue AS jo
ON s.joukkue_id = jo.joukkue_id
GROUP BY jo.joukkue_id
ORDER BY minuutit DESC;
GROUP BY jo.joukkue_id;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment