Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: ORDER BY ongelma

Sivun loppuun

tuomas88 [22.04.2004 17:26:13]

#

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?

kasetti [22.04.2004 17:44:59]

#

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?

tuomas88 [22.04.2004 20:47:47]

#

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...

ajv [22.04.2004 21:00:52]

#

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?

tuomas88 [23.04.2004 17:20:15]

#

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...

Meitzi [23.04.2004 20:07:19]

#

Kokeileppa

"SELECT * FROM kuvat WHERE tila = '1' AND arvosanat_lukumaara > '10' ORDER BY 'arvosanat_yhteensa' DESC, 'arvosanat_lukumaara' DESC"

Meitzi [23.04.2004 20:10:51]

#

Hmm.. eiku hetkinen.. haluat tehdä tuossa jakolaskun?

Eipä muuten taida onnistua. Lisää taulukkoon sarake jossa nuo on valmiiksi laskettu.

tuomas88 [23.04.2004 21:16:15]

#

lainaus:

Eipä muuten taida onnistua.

olisiko sitten mitään muuta keinoa laittaa nuo järjestykseen kun ORDER BY?

ajv [24.04.2004 10:35:37]

#

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.

tuomas88 [24.04.2004 12:13:44]

#

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'>
&nbsp;
</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

ajv [24.04.2004 14:14:15]

#

<?
$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.

Meitzi [24.04.2004 17:30:48]

#

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.

tuomas88 [24.04.2004 17:34:17]

#

nyt toimii muuten, paitsi että $t sisältää vain 10 saraketta, vaikka niitä oikeasti olisi 21!

mistäs tämä johtuu?

tuomas88 [24.04.2004 18:45:26]

#

edit: nyt toimii!

kiitokset ajv:lle!

Antti [24.04.2004 23:18:32]

#

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

Wizard [25.04.2004 00:20:45]

#

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...

Meitzi [25.04.2004 13:34:19]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta