Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: MySQL ongelma

Jonne [30.11.2012 15:50:42]

#

Olen tässä muutaman tovin koittanut pähkäillä seuraavaa:
Minulla on teams ja users taulut.
users taulussa on teamID arvo, joka vastaa teams taulun id arvoa.

SELECT
	teams.name,
	teams.location,
	teams.rank,
	count(users.id)
FROM teams
LEFT JOIN users ON users.teamID = teams.id
LIMIT 20

En saa tällä kuitenkaan kuin yhden haku tuloksen minkä lisäksi count(users.id) näyttää mitä sattuu.
Ilmeisesti tuo LEFT JOIN bugaa jotenkin?

Mod. vaihtoi oikeat kooditagit!

Metabolix [30.11.2012 16:04:38]

#

Kyselystäsi puuttuu GROUP BY teams.id. Ilman sitä hakusi laskee kaikki rivit samaan, jolloin COUNT antaa pelaajien kokonaismäärän ja joukkueeksi tulee satunnainen joukkue.

Jonne [30.11.2012 16:10:24]

#

Pelittää, kiitos :)

Lisäys:

Mitenkäs saisin tämän toimimaan?
WHERE count(users.id)>5 antaa virhe ilmoituksen 'Invalid use of group function'

SELECT
	teams.name,
	teams.location,
	teams.rank,
	count(users.id)
FROM teams
LEFT JOIN users ON users.teamID = teams.id
WHERE count(users.id)>5
GROUP BY teams.id
LIMIT 20;

Mod. vaihtoi oikeat kooditagit!

Metabolix [30.11.2012 17:56:24]

#

Virhe on, että WHERE-kohdassa ei voi käyttää COUNT-funktiota tai muitakaan vastaavia ryhmittelyyn liittyviä funktioita (group function), koska WHERE koskee haettavia rivejä ennen ryhmittelyä – kuten kyselyn järjestyksestäkin voi päätellä. Tuo ehto täytyy siis laittaa vasta GROUP BY -kohdan jälkeen HAVING-sanalla.

Vastaus

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

Tietoa sivustosta