Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL ja alikysely

mmikko [12.04.2012 22:05:16]

#

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?

Metabolix [12.04.2012 22:39:45]

#

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.

mmikko [12.04.2012 22:50:08]

#

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!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta