Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL kysely onkelma

olaav [10.06.2008 10:19:00]

#

Kannassa on kaksi seuraava taulua:

Taulu "jarjestajat"

id | jarjestaja
============
 1 | Firma Oy
 2 | Bisnes Ky
 3 | Yritys Ay

Taulu "kurssit"

id | jarjestaja_id | laskutus
==========================
 1 | 1          | 1
 2 | 2          | 0
 3 | 1          | 0
 4 | 2          | 0
 6 | 1          | 1

Suoritan seuraavanlaisen kyselyn:

SELECT
	jarjestajat.id,
	jarjestaja,
	(COUNT(kurssit.laskutus) - SUM(kurssit.laskutus)) AS laskutettavaa
FROM
	kurssit,
	jarjestajat
WHERE
	jarjestaja_id = jarjestajat.id

Ja kysely palauttaa seuraavaa:

1 | Firma Oy  | 1
2 | Bisnes Ky | 2

Ongelmana on että haluasisin kyselyn palauttavan myös järjestäjät joilla ei ole vielä yhtään kurssia. Eli haluamani lopputulos pitäisi näyttää tältä:

1 | Firma Oy  | 1
2 | Bisnes Ky | 2
3 | Yritys Ay | 0

Jotenkin tämä onnistuu, mutta en ahkeralla googletuksellakaan löytänyt vastausta. Josko täältä löytyisi apu?

Kiitos jo näin etukäteen mahdollisille avunannoille.

Vasta_alkaja [10.06.2008 10:26:56]

#

Äkkiseltään tulisi mieleen, että toimisiko IFNULL, eli jos arvo on tyhjä, niin pakotetaan sille haluttua arvo, esim. ei kursseja. Eikös nolla ollut yhtä kuin tyhjä. ( korjatkaa viisaammat, jos väärin muistan )

Wizard [10.06.2008 13:58:51]

#

Kokeile:

SELECT
    jarjestajat.id,
    jarjestaja,
    (COUNT(kurssit.laskutus) - SUM(kurssit.laskutus)) AS laskutettavaa
FROM
    kurssit,
    jarjestajat
WHERE
    jarjestaja_id = jarjestajat.id
union
select id, jarjestaja, '0'
from jarjestajat
where id not in
(select distinct jarjestaja_id
from kurssit)

Ratkaisun voi tehdä kyllä parilla muutamallakin tavalla, mutta maaginen sana tuossa voisi olla vaikka union.

Hycke [10.06.2008 14:20:12]

#

Tämä voisi toimia(ei testattu MySQL:ssä)

SELECT 	jarjestajat.id
,	jarjestajat.jarjestaja
,	sum(case ifnull(laskutus,1) when 0 then 1 else 0 end) as laskutettavaa
FROM 	jarjestajat
LEFT OUTER JOIN kurssit on jarjestajat.id=kurssit.jarjestaja_id
GROUP BY	jarjestajat.id
,	jarjestajat.jarjestaja
ORDER BY jarjestajat.id

olaav [10.06.2008 21:15:01]

#

Kiitän!

Molemmat kyselyt palauttivat juuri sitä mitä halusin.

Vastaus

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

Tietoa sivustosta