Pitipäs kääntyä putkanpuolella ja tulla kyselemaan apuja pitkästä aikaa :)
mysql kyseessä taulussa:
hometeam | awayteam | score1 | score2 | ftr
team1 | team2 | 3 | 0 | H
team2 | team1 | 1 | 1 | D
jne...
haluan hakea montako H, D, A joukkueella team1 on:
select hometeam, ( select count(ftr) from data where ftr = "H" ) as home, ( select count(ftr) from data where ftr = "D" ) as draw, ( select count(ftr) from data where ftr = "A" ) as away from data where hometeam = "team1" group by hometeam
ajatus on tuossa varmaankin oikean suuntainen, koska nyt tuo hakee kaikki mitä kanssa on h,d,a:t luku vielä täsmääkin, mutta tuo loppu menee sitten metsään kerran se ei hae team1 dataa... oon tuijottanut tuota kauan, mutta onko joku ajatusvirhe mulla?
Alikysely on melko harvoin oikea tai paras ratkaisu. Kun haetaan kokonaismääriä, kuuluu käyttää suoraan pääkyselyssä sellaisia funktioita kuin COUNT ja SUM ja tarvittaessa IF. Alikysely sen sijaan palauttaa sen, mitä se palauttaisi yksin ajettunakin; tuossa siis haet alikyselyissä kaikki rivit riippumatta joukkueesta. Jos tuota logiikkaa yrittäisi jotenkin järkeväksi soveltaa, mielekäs ratkaisu olisi ajaa erikseen kolme kyselyä.
Yhdellä kyselyllä oikea tapa on tällainen:
SELECT SUM(ftr = "H") AS home, SUM(ftr = "D") AS draw, SUM(ftr = "A") AS away FROM data WHERE hometeam = "team1"
GROUP-osaa ei tarvita, kun haetaan vain yhden joukkueen tietoja. Myös hometeam-sarakkeen hakeminen kannasta on turhaa, koska se tiedetään jo valmiiksi, koska juurihan se on itse syötetty WHERE-osaan.
Kannattaa myös sisentää koodi siistimmin. Tuosta on ensi silmäyksellä kohtalaisen vaikea hahmottaa alikyselyt. Lisäksi käytät välejä ja tabeja sekaisin.
kiitos metabolix avusta ja vinkeistä! juurikin noin sen pitää toimia, eipä toi mun aika tohon väkerrykseen hukkaan menny sai ne vähäset harmaat aivosolut liikettä. mutta kiitos vielä kerran!
Aihe on jo aika vanha, joten et voi enää vastata siihen.