Commit b33ea7e5 authored by M1888's avatar M1888

ekat kyselyt

parent bb1d9173
......@@ -17,14 +17,59 @@ Vaatimusmäärittelyn pohjalta nousi ainakin seuraavanlaisia käsitteitä:
## Toteutus
Lähdettäessä toteuttamaan vaatimusmäärittelyn mukaista ensimmäistä versiota tietokannasta, kannan luonti sujui hyvin ja alustavia tietojakin sai lisättyä. Ongelmat kuitenkin ilmenivät ottelutapahtumia lisätessä. Olin suunnitellut ottelutapahtuman tapahtuma_id:n olevan viittaus jonkin ottelutapahtuman id-tauluun (maali, jäähy, rankkari, aikalisä), ja oikea taulu josta tämä id etsittäisiin pääteltäisiin ottelutapahtuman tyyppi-kentän mukaan.
Kun kanta oli vihdoin saatu toimimaan, oli aika syöttää tietoja sinne.
Tämä ei kuitenkaan onnistunut, vaan MySQL valitti vierasavaimien konfliktista, kun kaikista tauluista ei löytynyktään sopivaa id:tä:
Alkuun lisättiin neljä kaupunkia, niiden areenat ja joukkueet.
| Kaupunki | Joukkue | Areena |
|---|---|---|
| Jyväskylä | JYP | LähiTapiola Areena |
| Kuopio | KalPa | Niiralan monttu |
| Tampere | Tappara | Hakametsän jäähalli |
| Pori | Ässät | Isomäki Areena |
Jokaiselle joukkueelle pyrin lisäämään seitsemän pelaajaa - kolme hyökkääjää, kolme puolustajaa sekä yhden maalivahdin.
Näiden välille lähdettiin sitten lisäämään otteluita. Ensimmäisen keksin päästä, ja kahteen jälkimmäiseen totesin helpommaksi käyttää lähteenä oikeita ottelutapahtumia näiden joukkueiden välisistä peleistä.
| Ottelu | Kotijoukkue | Vierasjoukkue | Tulos |
| 1 | JYP | KalPa | 3-2 |
| 2 | Tappara | Ässät | 4-3 |
| 3 | Ässät | KalPa | 3-2 |
Kun ottelut oli saatu lisättyä, oli aika lähteä työstämään erilaisia kyselyitä kannasta.
Pistepörssi (maalit + syötöt yhteenlaskettuna):
```SQL
mysql> INSERT INTO ottelutapahtuma (tyyppi, tapahtuma_id, ottelu_id, aika) VALUES
-> (2, 1, 1, 3*60+14);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`M1888`.`ottelutapahtuma`, CONSTRAINT `fk_ottelutapahtuma_maali1` FOREIGN KEY (`tapahtuma_id`) REFERENCES `maali` (`maali_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
```
SELECT CONCAT(p.enimi, ' ', p.snimi) AS Nimi, count(m.pelaaja_id) AS Pts
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; -- TODO: laskee kaikki maalit, ei jätä omia maaleja huomiotta.
Muutaman eri version jälkeen (ks. [vaatimusmaarittely.md](vaatimusmaarittely.md)), saatiin kanta vihdoin toimimaan.
+------------------+-----+
| Nimi | Pts |
+------------------+-----+
| Eetu Luostarinen | 3 |
| Niklas Appelgren | 3 |
| David Tomasek | 2 |
| Anton Stråka | 2 |
| Teemu Suhonen | 2 |
| Balazs Sebok | 2 |
| Aleksi Rekonen | 2 |
| Mikael Seppälä | 2 |
| Lenni Killinen | 2 |
| Matti Järvinen | 2 |
| Saku Salmela | 1 |
| Niko Ojamäki | 1 |
| Aleksi Varttinen | 1 |
| Patrik Puistola | 1 |
| Juuso Ketola | 1 |
| Hugo Haš | 1 |
| Joona Riekkinen | 1 |
+------------------+-----+
17 rows in set (0.00 sec)
```
\ No newline at end of file
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