Dynamisch voetbalklassement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart Coelmont

Bart Coelmont

30/06/2005 14:09:00
Quote Anchor link
Goeienamiddag,

ik ben bezig met de het maken van een database voor onze minivoetbalcompetitie en ik zit een klein beetje vast en ik wou eens horen of hier mensen zijn met creatieve ideëen die mij terug aan de gang kunnen krijgen. Ik zal eerst het probleem eens situeren.

Ziehier het schema van mijn database:
- EER schema:
http://student.kuleuven.be/~s0106274/sperma_db/eer_sporting_erma.jpg
- relationeel schema:
http://student.kuleuven.be/~s0106274/sperma_db/relschema_sportin_erma.jpg

Waar het nu allemaal om draait is dat ik een tabel gemaakt heb met ploegen (ploegx,ploegnr,...) en een tabel met wedstrijden. Deze wedstrijden worden volledig bepaald door de combinatie: thuisploeg,uitploeg en de datum van de wedstrijd. Daarnaast bewaar ik ook thuisdoelpunten en de uitdoelpunten. Met behulp van een aantal views wil ik dan hieruit een klassement opstellen (winst = 3pntn, verlies 0 en gelijk 1). Ik wil dat indien ik een wedstrijd verander (bvb 4-3 wordt 3-4) dat ik niet overal punten ga moeten bijtellen en aftrekken dus dat ik gewoon de verandering van score kan aanbrengen en dat mijn DB automatisch het juiste klassement weergeeft. Vandaar deze misschien rare keuze voor thuisdoelpunten - uitdoelpunten.

Wat zijn nu de problemen:
1) ten eerste zou ik via 6 views om moeten gaan. De reden: ik moet voor elk team bepalen hoeveel thuiswedstrijden ze gewonnen, verloren en gelijk gespeeld hebben. Idem voor de uitwedstrijden. Dat maakt 6. (5 indien ik aantal wedstrijden gespeeld bereken: #verlies = #gespeeld - #aantal verlies - #winst). Dat vind ik dus al wat teveel van het goede. En ik moet deze tussenresultaten wel bepalen want ik kan niet iets dergelijks doen:
select thuisploeg,count(thuisdoelpunten > uitdoelpunten),count(thuisdoelpunten=uitdoelpunten),count(thuisdoelpunten<uitdoelpunten)
from wedstrijd
group by thuisploeg
Dit werkt natuurlijk niet. Die selectie criteria moeten immers in de where clause staan. Ik kan dus niet in 1 query zowel winst als gelijk enz opvragen -> vandaar de views.
2) Nu heb ik views gedefinieerd in de zin van:
create view liga0506.thuiswinst(ploegnr,aantalwinst,aantaldoelpunten) as
(select thuisploeg,count(*) as aantal,sum(thuisdoelpunten) as aantaldoelpunten
from wedstrijd
where thuisdoelpunten>uitdoelpunten and gespeeld = true
group by thuisploeg
)
Allemaal mooi en wel maar het is perfect mogelijk dat op het tijdstip van de opvraging er een aantal ploegen zijn die een thuismatch gewonnen hebben maar nog geen uitmatch. De situatie die ik dan krijg is dat bvb in thuiswinst 5 ploegen staan met hun aantal gewonnen thuismatchen en in uitwinst slechts 3 van deze 5. Met volgende query zou je een valabel resultaat krijgen indien alle matchen ingegeven + iedereen minstens 1 keer thuis en 1 keer uitgewonnen heeft:
SELECT t.ploegnr, t.aantalwinst + u.aantalwinst
FROM thuiswinst t ,uitwinst u
WHERE t.ploegnr=u.ploegnr

Mijn grote probleem is nu dat ik geen zinvolle count/sum-fctie kan definiëren die een zinvolle 0 kan produceren zonder het aantal winstwedstrijden per team aan te tasten. Dus dacht ik laat mij mijn view gewoon beter definiëren en daar al meteen op zoek te gaan naar teams die nog niets gespeeld of gewonnen hebben en dan plaats ik daar standaard een 0 voor in de tabel. (wel heel onorthodox vind ik zelf, maar nood breekt wet). Ziehier wat ik in gedachten had:
create view liga0506.thuiswinst(ploegnr,aantalwinst,aantaldoelpunten) as
(select thuisploeg,count(*) as aantal,sum(thuisdoelpunten) as aantaldoelpunten
from wedstrijd
where thuisdoelpunten>uitdoelpunten
group by thuisploeg

union

select p.ploegnr,0,0
from ploeg p
where not exists(
select *
from wedstrijd w
where w.thuisploeg = p.ploegnr
and thuisdoelpunten>uitdoelpunten
)
)

Dus in het eerste deel tel ik gewoon de thuiswinsten per team. In het tweede gedeelte kijk ik welke ploeg er nog geen thuiswedstrijd gewonnen heeft. De query zelf levert het gewenste resultaat op. Maar de view definitie werkte niet. Ik kreeg de melding dat er een syntax error was in de buurt van union. Ik heb simpele queries geprobeerd met unions en daar view van gemaakt. Dat lukte ook niet dus ik vermoed dat die UNION niet in een view mag, alhoewel ik daar geen bewijs van gevonden heb. Als dit zou werken, dan is de rest simpel. Maar dit werkt niet.

Is er iemand een goed idee heeft voor:
1)het oplossen van het feit dat ik 6 views moet maken zonder de functionaliteit te verminderen
2)hoe ik die 0\'en erin krijg zonder met die union te werken of zonder ze expliciet te plaatsen.
3)Kan ik misschien op een andere manier mijn klassement bepalen uit de huidige tabellen
4)waarom wordt die union niet geaccepteerd in het creëren van de view.
5)andere suggesties zijn ook welkom

BTW: ik gebruik mysql server 5.0

Alvast bedankt,

Bart
 
PHP hulp

PHP hulp

24/11/2024 21:48:19
 
Bart Coelmont

Bart Coelmont

30/06/2005 22:13:00
Quote Anchor link
Hallo,

sorry voor deze immense post. Blijkbaar zijn de haakjes verboden achter create view ...(...) as. Nu is alles dus in orde.

Nogmaals sorry maar ik was het einde nabij ;) hehe

het beste nog
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.