Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kannasta haku, samanlaisten tekstien vertailu

Omasual [24.02.2008 20:03:57]

#

Vaikea selittää, mutta epäilen tähän olevan joku nokkela ratkaisu.

Kannasta haetaan kysymyksen id:llä vastauksia siihen samaiseen kysymykseen, oletetaan että seuraavanlaisia vastauksia on kannassa:

makkara
kalja
peruna
peruna
makkara
kalja
kalja
kalja

Kuinka PHP:llä onnistuisi muuttujien kanssa toimiminen niin, että se kertoisi "makkara: 2kpl, kalja: 4kpl, peruna: 2kpl". Ja vastaukset tietty muuttuu kokoajan, joten PHP:n pitää haistaa eri vaihtoehdot ja tämän jälkeen katsoa kuinka monta kutakin löytyy.

Apuja?

Antti Laaksonen [24.02.2008 20:14:54]

#

Nämä tiedot saa suoraan selville SQL-kyselyllä:

SELECT vastaus, COUNT(vastaus) FROM vastaukset GROUP BY vastaus

Tämän kyselyn tulos on:

vastaus         COUNT(vastaus)
--------------------------------
kalja           4
makkara         2
peruna          2

Kyselyyn voi sijoittaa myös WHERE-ehdon ennen GROUP BY -osaa.

Tietysti määrät voi laskea myös PHP:ssä, mikä voi olla hyvä vaihtoehto, jos tiedot haetaan joka tapauksessa tietokannasta muuta käsittelyä varten.

Tässä on vielä muutama esimerkki, joista ensimmäisessä määrät lasketaan SQL:ssä ja toisessa määrät lasketaan PHP:ssä.

$tulos = mysql_query("SELECT vastaus, COUNT(vastaus) FROM vastaukset GROUP BY vastaus");
for ($i = 0; $i < mysql_num_rows($tulos); $i++) {
    $vastaus = mysql_result($tulos, $i, 0);
    $maara = mysql_result($tulos, $i, 1);
    echo "$vastaus: $maara kpl<br>";
}
$tulos = mysql_query("SELECT vastaus FROM vastaukset");
for ($i = 0; $i < mysql_num_rows($tulos); $i++) {
    $vastaus = mysql_result($tulos, $i);
    $maarat[$vastaus]++;
}
foreach ($maarat as $vastaus => $maara) {
    echo "$vastaus: $maara kpl<br>";
}

Omasual [24.02.2008 20:48:36]

#

Taas Antilta arvokkaita neuvoja, kiitos!

Joku bugi taitaa mulla vielä olla. Kysymyksien väliin tulostuu vastaukset, mutta portaittain kasvavasti:

Kysymys 1:
kalja 1
makkara 2

Kysymys 2:
kalja 1
makkara 2
liina 5
rätti 6

Kysymys 3:
kalja 1
makkara 2
liina 5
rätti 6
sohva 1
tuoli 1

Eli joku ei tyhjene. Otin käyttöön esimerkkisi numero 2, eli PHP:llä lasketaan määrät.

Antti Laaksonen [24.02.2008 20:58:57]

#

Tyhjennä taulukko aina ennen uutta SQL-kyselyä:

$maarat = array();

Omasual [24.02.2008 21:02:19]

#

Ja näinhän se meni, kiitos taas. Nyt toimii.

Lisäsin tuohon vielä mysql_numrowsia apuna käyttäen prosenttiluvun perään.

Vastaus

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

Tietoa sivustosta