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 ...@@ -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. Näin saatiinkin aikaiseksi kätevät pistepörssit joukkueille ja pelaajille, sekä statistiikkaa jäähyminuuteista.
```SQL ```SQL
mysql> SELECT * FROM Pisteporssi; mysql> SELECT * FROM Pisteporssi ORDER BY pts DESC;
+------------+--------+-------------+-----+ +------------+--------+-------------+-----+
| pelaaja_id | enimi | snimi | pts | | pelaaja_id | enimi | snimi | pts |
+------------+--------+-------------+-----+ +------------+--------+-------------+-----+
...@@ -96,7 +96,7 @@ mysql> SELECT * FROM Voittajat; ...@@ -96,7 +96,7 @@ mysql> SELECT * FROM Voittajat;
+-----------+------------+---------+--------+ +-----------+------------+---------+--------+
3 rows in set (0.00 sec) 3 rows in set (0.00 sec)
mysql> SELECT * FROM Pisteporssi_joukkue; mysql> SELECT * FROM Pisteporssi_joukkue ORDER BY pts DESC;
+---------+-----+ +---------+-----+
| nimi | pts | | nimi | pts |
+---------+-----+ +---------+-----+
...@@ -106,7 +106,7 @@ mysql> SELECT * FROM Pisteporssi_joukkue; ...@@ -106,7 +106,7 @@ mysql> SELECT * FROM Pisteporssi_joukkue;
+---------+-----+ +---------+-----+
3 rows in set (0.01 sec) 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 | | pelaaja_id | enimi | snimi | minuutit |
+------------+----------+-------------+----------+ +------------+----------+-------------+----------+
...@@ -127,7 +127,7 @@ mysql> SELECT * FROM Jaahyt_pelaajat; ...@@ -127,7 +127,7 @@ mysql> SELECT * FROM Jaahyt_pelaajat;
+------------+----------+-------------+----------+ +------------+----------+-------------+----------+
14 rows in set (0.01 sec) 14 rows in set (0.01 sec)
mysql> SELECT * FROM Jaahyt_joukkue; mysql> SELECT * FROM Jaahyt_joukkue ORDER BY minuutit DESC;
+---------+----------+ +---------+----------+
| nimi | minuutit | | nimi | minuutit |
+---------+----------+ +---------+----------+
......
...@@ -252,6 +252,10 @@ CREATE TABLE IF NOT EXISTS `M1888`.`ottelutapahtuma` ( ...@@ -252,6 +252,10 @@ CREATE TABLE IF NOT EXISTS `M1888`.`ottelutapahtuma` (
REFERENCES `M1888`.`maali` (`maali_id`) REFERENCES `M1888`.`maali` (`maali_id`)
ON DELETE NO ACTION ON DELETE NO ACTION
ON UPDATE 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 ( CONSTRAINT `CK_tapahtumaid` CHECK (
CASE WHEN aikalisa_id IS NULL THEN 0 ELSE 1 END + CASE WHEN aikalisa_id IS NULL THEN 0 ELSE 1 END +
CASE WHEN jaahy_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` ( ...@@ -259,6 +263,45 @@ CREATE TABLE IF NOT EXISTS `M1888`.`ottelutapahtuma` (
CASE WHEN maali_id IS NULL THEN 0 ELSE 1 END = 1)) CASE WHEN maali_id IS NULL THEN 0 ELSE 1 END = 1))
ENGINE = InnoDB; 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 SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
......
...@@ -17,8 +17,7 @@ CREATE VIEW Pisteporssi AS ...@@ -17,8 +17,7 @@ CREATE VIEW Pisteporssi AS
FROM maali AS m FROM maali AS m
INNER JOIN pelaaja AS p INNER JOIN pelaaja AS p
ON (p.pelaaja_id = m.pelaaja_id OR p.pelaaja_id = m.syottaja_id) ON (p.pelaaja_id = m.pelaaja_id OR p.pelaaja_id = m.syottaja_id)
GROUP BY p.pelaaja_id GROUP BY p.pelaaja_id;
ORDER BY pts DESC;
-- Joukkueiden tekemät maalit (apunäkymä seuraavalle) -- Joukkueiden tekemät maalit (apunäkymä seuraavalle)
CREATE VIEW Joukkue_maalit AS CREATE VIEW Joukkue_maalit AS
...@@ -52,12 +51,11 @@ CREATE VIEW Pisteporssi_joukkue AS ...@@ -52,12 +51,11 @@ CREATE VIEW Pisteporssi_joukkue AS
nimi, nimi,
COUNT(nimi) AS pts COUNT(nimi) AS pts
FROM Voittajat FROM Voittajat
GROUP BY nimi GROUP BY nimi;
ORDER BY pts;
-- Jäähyminuutit: -- Jäähyminuutit:
-- Pelaajat, jotka ovat keränneet eniten jäähyminuutteja -- Jäähyt pelaajittain minuutteina
CREATE VIEW Jaahyt_pelaajat AS CREATE VIEW Jaahyt_pelaajat AS
SELECT SELECT
...@@ -68,8 +66,7 @@ CREATE VIEW Jaahyt_pelaajat AS ...@@ -68,8 +66,7 @@ CREATE VIEW Jaahyt_pelaajat AS
FROM jaahy AS j FROM jaahy AS j
INNER JOIN pelaaja AS p INNER JOIN pelaaja AS p
ON p.pelaaja_id = j.pelaaja_id ON p.pelaaja_id = j.pelaaja_id
GROUP BY pelaaja_id GROUP BY pelaaja_id;
ORDER BY minuutit DESC;
-- Jäähyminuutit joukkueittain -- Jäähyminuutit joukkueittain
CREATE VIEW Jaahyt_joukkue AS CREATE VIEW Jaahyt_joukkue AS
...@@ -83,6 +80,5 @@ CREATE VIEW Jaahyt_joukkue AS ...@@ -83,6 +80,5 @@ CREATE VIEW Jaahyt_joukkue AS
ON p.pelaaja_id = s.pelaaja_id ON p.pelaaja_id = s.pelaaja_id
INNER JOIN joukkue AS jo INNER JOIN joukkue AS jo
ON s.joukkue_id = jo.joukkue_id ON s.joukkue_id = jo.joukkue_id
GROUP BY jo.joukkue_id GROUP BY jo.joukkue_id;
ORDER BY minuutit DESC;
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