Pitäisi tehdä eräänlainen top-lista kuville, mutta en tiiä, miten saisin tarvitsemani tiedot tietokannasta ulos oikeassa järjestyksessä.
taulussa kuvat on sarakkeet: arvosanat_yhteensa ja arvosanat_lukumaara
siis kuvan arvostus tulee:
arvosanat_yhteensa/arvosanat_lukumaara
$query2="SELECT * FROM kuvat WHERE tila = '1' AND arvosanat_lukumaara > '10' ORDER BY 'arvosanat_yhteensa/arvosanat_lukumaara' DESC"; ei tunnu toimivan, miten pitäisi toteuttaa?
Suomeksi: Valitse kaikki kuvat taulukosta jossa tila on 1 ja niin edespäin.... Onko tuo tila muuttuja ($tila)? vai pitäisikö taulussa olla sellainen sarake?
kasetti kirjoitti:
Suomeksi: Valitse kaikki kuvat taulukosta jossa tila on 1 ja niin edespäin.... Onko tuo tila muuttuja ($tila)? vai pitäisikö taulussa olla sellainen sarake?
kuvat tulevat galleriaan ylläpidon hyväksynnän kautta ja tuo tila määrittelee, onko kuva hyväksytty vai ei...
edelleen jäi selvittämättä, että miten saan nuo tiedot oikeaan järjestykseen...
tuomas88 kirjoitti:
$query2="SELECT * FROM kuvat WHERE tila = '1' AND arvosanat_lukumaara > '10' ORDER BY 'arvosanat_yhteensa/arvosanat_lukumaara' DESC";
Kyllä tuon pitäisi toimia. Antaako jotain virhe ilmotusta vai?
ajv kirjoitti:
Kyllä tuon pitäisi toimia. Antaako jotain virhe ilmotusta vai?
palauttaa tiedot sattumanvaraisessa järjestyksessä, ainakaan en ole huomannut siitä mitään logiikkaa...
Kokeileppa
"SELECT * FROM kuvat WHERE tila = '1' AND arvosanat_lukumaara > '10' ORDER BY 'arvosanat_yhteensa' DESC, 'arvosanat_lukumaara' DESC"
Hmm.. eiku hetkinen.. haluat tehdä tuossa jakolaskun?
Eipä muuten taida onnistua. Lisää taulukkoon sarake jossa nuo on valmiiksi laskettu.
lainaus:
Eipä muuten taida onnistua.
olisiko sitten mitään muuta keinoa laittaa nuo järjestykseen kun ORDER BY?
tuomas88 kirjoitti:
olisiko sitten mitään muuta keinoa laittaa nuo järjestykseen kun ORDER BY?
No on. Esimerkiksi luet tiedot taulukkoon ja järjestät taulukon.
joku looppi ja
$taulu[] = arvosanat_yhteensa/arvosanat_lukumaara; rsort($taulu);
Ja tietenkin kannattaa tehdä jotenkin näin:
$i = 0 do{ $taulu[$i]['arvo'] = arvosanat_yhteensa/arvosanat_lukumaara; $taulu[$i]['arvosanat_yhteensa'] = arvosanat_yhteensa; $taulu[$i]['arvosanat_lukumaara'] = arvosanat_lukumaara; $i++; }while($i<jotain)
Ja sitten käytät array_multisort()-funkkaria taulun järjestämiseen -> tulostus.
yritin tänäaamuna väsätä jotain tällästä:
$query2="SELECT id,arvosanat_yhteensa,arvosanat_lukumaara FROM kuvat WHERE tila = '1' AND arvosanat_lukumaara > '5'"; $haku=mysql_query($query2); $maara77=mysql_num_rows($haku); $sivu = $_GET['sivu']; if(!isset($sivu)) { $sivu = "1"; } $maar77 = $maara77 / 10; $sivumaara = ceil($maar77); $maara = $sivu * 10; $esivu = $sivu - 1; $ssivu = $sivu + 1; $maara_a = $maara - 10; if ($maara > $maara77) { $maara = $maara77; } if ($maara_a < 0) { $maara_a = 0; } $maara_aa = $maara_a; if ($maara_a == "0") { $maara_aa = 1; } print(" <table width=750 border=0 cellpadding=2 cellspacing=0> <tr> <td class=ylaosa height=20 width=100% align=top> » Kuvat: $maara_aa - $maara: </td> <td class=ylaosa height=20 width=100% align=top style='background: white'> </td> </tr> <tr> <td align=left valign=top> <table width=580 height=100 border=0 cellpadding=2 cellspacing=0> <tr> <td class=alaosa align=left valign=top style='background: white'> "); print("<table cellpadding=4 cellspacing=0 height=120 border=0>"); $laskuri11 = 1; print("<br>Sivu:"); for ($i = 0; $i < $sivumaara; $i++) { if($sivu == $laskuri11) { print(" <strong>[$laskuri11]</strong>"); } else { print(" <a href=toplista.php?sivu=$laskuri11 class=sivunumero>[$laskuri11]</a>"); } $laskuri11++; } print("<br><br>"); for ($i = $maara_a; $i < $maara; $i++) { $kuvan_id = mysql_result($haku, $i, "id"); $kuva_arvostelu = mysql_result($haku, $i, "arvosanat_yhteensa"); $kuva_arvostelijat_lkm = mysql_result($haku, $i, "arvosanat_lukumaara"); $arvostus1 = $kuva_arvostelu / $kuva_arvostelijat_lkm; $t[$i] = array("arvostus" => "$arvostus1", "kuid" => "$kuvan_id"); } $laskuri = 0; $laskuri2 = 0; foreach ($t as $r => $row) { $arvostus[$r] = $row["arvostus"]; $kuvid[$r] = $row["kuid"]; } array_multisort($arvostus, SORT_DESC, $t); for ($i = $maara_a; $i < $maara; $i++) { $arvostu = $arvostus; $kuvidd = $kuvid; $query2="SELECT * FROM kuvat WHERE id = '$kuvidd '"; $haku56=mysql_query($query2); $maara77=mysql_num_rows($haku); $kuvan_id = mysql_result($haku56, $i, "id"); $kuvan_temppu = mysql_result($haku56, $i, "temppu"); $kuvan_lahettaja = mysql_result($haku56, $i, "lahettaja"); $kuvan_galleria = mysql_result($haku56, $i, "galleria"); $kuvan_tiedostonimi = mysql_result($haku56, $i, "tiedostonimi"); $kuva_arvostelu = mysql_result($haku56, $i, "arvosanat_yhteensa"); $kuva_arvostelijat_lkm = mysql_result($haku56, $i, "arvosanat_lukumaara"); $arvostus1 = $kuva_arvostelu / $kuva_arvostelijat_lkm; if($laskuri == 4) { print("</tr><tr>"); $laskuri = "1"; } else { $laskuri++; } $bgcolor = "whitesmoke"; if($laskuri2 == 1) { $bgcolor = "gainsboro"; $laskuri2 = "0"; } else { $laskuri2++; } // ja sitten yritetään tulostaa... }
ei toimi.
palauttaa suuren määrän virheilmoituksia:
Warning: array_multisort(): Argument #3 is an unknown sort flag in /home/int2000/17457/html/kuvat/toplista.php on line 146 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 166 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 167 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 168 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 169 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 170 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 171 Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 11 in /home/int2000/17457/html/kuvat/toplista.php on line 172 Warning: Division by zero in /home/int2000/17457/html/kuvat/toplista.php on line 176
ja siitä eteenpäin...
tossa koodissa on vamaan paljon korjaamista,
en ole ennen perehtynyt tähän :D
<? $kuvidd = $kuvid; //muotoon $kuvidd = $kuvid[$i]; $t[$i] = array("arvostus" => "$arvostus1", "kuid" => "$kuvan_id"); //muotoon $t[$i]["arvostus"] = $arvostus1; $t[$i]["kuid"] = $kuvan_id; //nuo vissiin ajaa samat asiat, mutta jotenkin toi $t[$i]["arvostus"] on selkeempi ?>
En tiedä onko noista mitään hyötyä, noita tietokantaongelmia on vaikee korjata/auttaa, kun ei pysty itse testaamaan.
Ja kannattaa muistaa että tuo voi olla aika raskas operaatio serverille, koska kaikki kuvat on pakko käydä läpi. Sensijaan jos tietokannassa olisi valmis sarake riittäisi vain järjestäminen senmukaan ja sitten vaikka ensimmäisen 10 näyttäminen.
nyt toimii muuten, paitsi että $t sisältää vain 10 saraketta, vaikka niitä oikeasti olisi 21!
mistäs tämä johtuu?
edit: nyt toimii!
kiitokset ajv:lle!
Huomasin säikkeen vasta tänään... oikea syntaksi tulisi olla seuraava (kannasta riippuen...) :
SELECT arvosanat_yhteensa, arvosanat_lukumaara , muut_sarakkeet, arvosanat_yhteensa/arvosanat_lukumaara as Tulos FROM kuvat
WHERE tila = '1' AND
arvosanat_lukumaara > '10'
ORDER BY Tulos DESC
Muistaakseni SQL syntaksi menee jotakuinkin näin:
SELECT arvosanat_yhteensä/arvosanat_lukumaara as arvostus
FROM kuvat
WHERE tila = '1'
AND arvosanat_lukumaara > '10'
ORDER BY arvostus DESC
Näin yömyöhään tietysti voi mennä hieman vikaan...
Katos, olihan täällä SQL taitureita. Vähän jo mietinkin että eikös tuo nyt jotenkin onnistu, mutta ilmeisesti en ole tuota koskaan käyttänyt.
Kannattaa tosiaan käyttää tuota Anttin ja Wizardin esittelemää tapaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.