/** * Palauttaa luvun, joka ilmoittaa, kuinka monta annetun yläluokan lajia * annettu henkilö on havainnut. * @param <type> $tietokantaolio * @param <type> $henkilo_id * @param <type> $lajiluokka_id * @param <type> $puolivuotiskauden_nro: 1->kevät 2010, 2-> syksy2010, 3->kevät2011 jne. * Jos tämä on ei-numeerinen, haetaan kaikki. * * Palauttaa taulukon, jossa kaksi lkm-alkiota: kaikki ja Suomessa havaitut * * KORJAA MENEMÄÄN HAVAINTOJAKSOJEN KAUTTA KUN KERKIÄT */ function laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo_id, $ylaluokka_id, $puolivuotiskauden_nro) { $lkm = array(); // Muotoillaan yläluokan lause: if (isset($ylaluokka_id) && is_numeric($ylaluokka_id) && $ylaluokka_id > 0) { $ylaluokkaehto = "blajiluokat.ylaluokka_id = {$ylaluokka_id}"; } else { $ylaluokkaehto = "blajiluokat.ylaluokka_id <> -1"; } // Muotoillaan puolivuotiskauden valinta: if (is_numeric($puolivuotiskauden_nro)) { $vuosi = floor(2010 + ($puolivuotiskauden_nro - 1) / 2); $kk_alaraja = 0; $kk_ylaraja = 7; if ($puolivuotiskauden_nro % 2 == 0) { $kk_alaraja = 6; $kk_ylaraja = 13; } $jaksoaikaehto = "AND bhavainnot.vuosi = {$vuosi}\n AND bhavainnot.kk > {$kk_alaraja}\n AND bhavainnot.kk < {$kk_ylaraja}"; } else { $jaksoaikaehto = ""; /* Haetaan kaikki! */ } // Muotoillaan varmuusehto: $varmuusehto = "AND bhavainnot.varmuus >= " . Varmuus::$melkoisen_varma; $hakulause = "SELECT bhavainnot.lajiluokka_id AS laji_id\n FROM bhavainnot\n JOIN henkilot\n ON bhavainnot.henkilo_id = henkilot.id\n JOIN blajiluokat\n ON bhavainnot.lajiluokka_id = blajiluokat.id\n WHERE henkilot.id = {$henkilo_id}\n AND {$ylaluokkaehto}\n {$jaksoaikaehto}\n {$varmuusehto}\n GROUP BY laji_id;\n "; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); // Palauttaa luvun 0 myös jos parametri paha. $lkm[0] = $tietokantaolio->hae_osumarivien_lkm($hakutulos); // Haetaan sitten vain Suomessa nähtyjen lkm: $suomi = Maat::$suomi; $hakulause = "SELECT bhavainnot.lajiluokka_id AS laji_id\n FROM bhavainnot\n JOIN henkilot\n ON bhavainnot.henkilo_id = henkilot.id\n JOIN blajiluokat\n ON bhavainnot.lajiluokka_id = blajiluokat.id\n WHERE henkilot.id = {$henkilo_id}\n AND {$ylaluokkaehto}\n {$jaksoaikaehto}\n {$varmuusehto}\n AND bhavainnot.maa = {$suomi}\n GROUP BY laji_id;\n "; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); // Palauttaa luvun 0 myös jos parametri paha. $lkm[1] = $tietokantaolio->hae_osumarivien_lkm($hakutulos); return $lkm; }