Avatar billede cmau Nybegynder
16. januar 2005 - 17:43 Der er 7 kommentarer og
1 løsning

top 10 liste, med stemmer i den ene database og spil i den anden

Hejsa jeg har en tabel der hedder zurekk_spil og en der hedder zurekk_stemmer hvordan kan jeg lave en topliste fra zurekk_spil, hvor den henter ud fra zurekk_stemmer efter stemme og hvor nr er li id'et på spillet?

Her er min sql:

CREATE TABLE zurekk_stemmer (
  id int(11) NOT NULL auto_increment,
  stemme int(60) NOT NULL default '',
  type varchar(60) NOT NULL default '',
  nr int(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

CREATE TABLE zurekk_spil (
  id int(11) NOT NULL auto_increment,
  navn varchar(60) NOT NULL default '',
  hits int(60) NOT NULL default '0',
  url varchar(255) NOT NULL default '',
  beskrivelse text NOT NULL,
  kategori varchar(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Så skal jeg hente alt i zurekk_spil ud, men de skal hentes ud så den henter fra zurekk_stemmer hvor nr = id på spillet og type = spil.

Så jeg kan udskrive hviket spil der er stemt bedst på!

Det vil altså sige at den også skal udskrive noget med SELECT AVG(stemme) AS gennemsnit

Så jeg kan finde bedømmelsen på spillet

_________________________________________________________________

Får denne fejl:

Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

har denne kode:

<?

echo '<p><a href="index.php">Tilbage til spil hovedesiden</a></p><p>Mest spillede spil:</p>';

include('../sql.php');

$visfra = (isset($_GET["visfra"])) ? $_GET["visfra"] : 0;
$prside = 10;

$query = mysql_query("SELECT AVG(stemmer.stemme) AS gennemsnit, spil.*, stemmer.* FROM zurekk_spil spil, zurekk_stemmer stemmer WHERE stemmer.nr=spil.id AND spil.kategori=stemmer.type ORDER BY gennemsnit DESC LIMIT $visfra, $prside") or die(mysql_error());

while ($row = mysql_fetch_array($query)) {

$type = "spil";
$id = $row[id];
$beskrivelse = $row[beskrivelse];
$beskrivelse = nl2br(htmlspecialchars($beskrivelse));

echo '<p><div align="center"><table border="1" width="505"><tr><td width="125" valign="top"><a href="ud.php?id='.$row[id" target="_blank"><img src="../images/spil/'.$row[id].'.jpg" width="125"></a><br>';

if(isset($_COOKIE["$type_$id"])) {
$bed = mysql_query("SELECT AVG(stemme) AS gennemsnit FROM zurekk_stemmer WHERE type = '$type' AND  nr = '$row[id]'") or die(mysql_error());

$bed = mysql_fetch_array($bed);

echo 'Bedømmelse: '.round($bed["gennemsnit"], 3).'';

}

if(!isset($_COOKIE["$type_$id"])) {
echo '<IFRAME name="'.$row[id].'" src="spil_form.php?type='.$type.'&nr='.$id.'" frameBorder="0" width="125" height="26"></IFRAME>';
}

echo '</td><td width="380" valign="top"><p><b>'.$row[navn].':</b> - <a href="#" onclick="window.open(\'spil_virker_ikke.php?id='.$id.'&navn='.$row[navn].'\',\'_blank\',\'width=300,height =350,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no\')">Virker ikke?</a></p><p>Spillet <b>'.$row[hits].'</b> gange.</p><p><b>Beskrivelse:</b> '.$beskrivelse.'</p></td></tr></table></div></p>';

}

echo '<p align="center">';

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM zurekk_spil"),0);

if ($visfra > 0) {
    $bagud = $visfra-$prside;
    echo "<a href=\"spil_mest.php?visfra=".$bagud."\">Forrige</a> ";
}
$page = 1;
for ($start = 0; $antal > $start; $start = $start + $prside) {
    if($visfra != $page * $prside - $prside) {
        echo "<a href=\"spil_mest.php?visfra=".$start."\">".$page."</a> ";
    } else {
        echo "[$page] ";
    }
    $page++;
}
if ($visfra < $antal - $prside) {
    $naeste = $visfra + $prside;
    echo " <a href=\"spil_mest.php?visfra=".$naeste."\">Næste</a>";
}



echo '</p><p>Der er <b>'.mysql_result(mysql_query("SELECT COUNT(*) FROM zurekk_spil"),0).'</b> spil i alt.</p>';

?>


Nogle der kan fixe den?
Avatar billede jakoba Nybegynder
16. januar 2005 - 18:06 #1
du mangler bare at fortælle hvordan der skal grupperes

$query = mysql_query("
    SELECT AVG(stemmer.stemme) AS gennemsnit,
          spil.*,
  --      stemmer.*      --FJERNET det vil give forskellige værdier i felter der skal grupperes
    FROM zurekk_spil spil, zurekk_stemmer stemmer
    WHERE stemmer.nr=spil.id AND spil.kategori=stemmer.type
    GROUP BY spil.id          -- tilføjet linie, grupperingsregel
    ORDER BY gennemsnit DESC
    LIMIT $visfra, $prside
") or die(mysql_error());
Avatar billede cmau Nybegynder
16. januar 2005 - 18:09 #2
Kunne du så prøve at give mig select linjen, som virker og står ud i en køre?
Avatar billede jakoba Nybegynder
16. januar 2005 - 18:27 #3
Det der med at du ikke kan hente alle felter i zurekk_stemmer tabellen er en grundlæggende regel når man ønsker at gruppere. Det forklares nok bedst med et eksempel:

tabel:    eksempel_tabel
felter:  form      farve      størrelse
row 1:      rund      rød        10
row 2:      firkant  grøn        12
row 3:      rund      grøn        8

  SELECT  farve, AVG(størrelse) AS snit
  FROM    eksempeltabel
  GROUP BY farve
går godt og giver
felter:  farve      snit
row 1:      rød        10
row 2:      grøn        10

men hvis du prøver at sige
  SELECT  form, farve, AVG(størrelse) AS snit
  FROM    eksempeltabel
  GROUP BY farve
går det galt, for SQL har ingen nulighed for at beslutte hvad der skal returneres som form i den grønne række, skal det være 'rund' eller 'firkantet' ?
Avatar billede jakoba Nybegynder
16. januar 2005 - 18:31 #4
du behøver kun linien 'ie en køre' hvis din php er gammel (et godt stykke før ver 3.23), eller kan du sagtens skrive den i flere linier som jeg gør der.

Jeg håber du er enig i at det er nemmere at læse (og rette i) end:
$query = mysql_query("SELECT AVG(stemmer.stemme) AS gennemsnit, spil.* FROM zurekk_spil spil, zurekk_stemmer stemmer WHERE stemmer.nr=spil.id AND spil.kategori=stemmer.type GROUP BY spil.id ORDER BY gennemsnit DESC LIMIT $visfra, $prside") or die(mysql_error());

en anden fordel er at man kan skrive sql kommentarer i det når det er flere linier.
Avatar billede cmau Nybegynder
16. januar 2005 - 18:33 #5
Forstår ikke meget af det der :( Men har du en måde jeg kan hente det på?
Avatar billede cmau Nybegynder
16. januar 2005 - 18:35 #6
så ikke lige din kommentar 18:31:44 tester det lige!
Avatar billede cmau Nybegynder
16. januar 2005 - 18:36 #7
Desværre den udskriver ikke noget :(

Se selv http://zurekk.woox.dk/spil/spil_bedst.php
Avatar billede cmau Nybegynder
18. januar 2005 - 14:09 #8
lukker da du ikkke svare§!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester