Avatar billede jangravgaard Nybegynder
18. marts 2003 - 07:11 Der er 4 kommentarer og
2 løsninger

Optimering af SELECT sætning

Jeg skal have lavet en oversigt over de spillere som har scoret flest mål og er blevet kåret til kampens spiller (manofmatch) flest gange vist på siden listet efter hold

Jeg har følgende tabeller til rådighed.

STATISTIK TABEL
Field      Type
id        int4
spillerid  int4
holdid    int4
manofmatch int4
maal      int4


SPILLER TABEL
Field    Type
ID        int4
navn      varchar
holdid    int4

Lige nu laver jeg 4 select sætninger for både udvælgelse af den meste scorende spiller samt 3 select sætninger for udvælgelse af den mest kårede spiller. Det må jeg da kunne optimere lidt.......
Avatar billede doodoo.dk Nybegynder
18. marts 2003 - 08:27 #1
<?php
$conn = mysql_connect("HOST","BRUGERNAVN","PASSWORD");
mysql_select_db("DATAVASE");

$result = mysql_query("SELECT * FROM statistik ORDER BY desc");
while($row = mysql_fetch_array($result)) {
echo "$row_maal";
echo "<br>";
?>

og det samme igen bare med manofmatch:

<?php
$conn = mysql_connect("HOST","BRUGERNAVN","PASSWORD");
mysql_select_db("DATAVASE");

$result = mysql_query("SELECT * FROM manofmatch ORDER BY desc");
while($row = mysql_fetch_array($result)) {
echo "$row_maal";
echo "<br>";
?>
Avatar billede doodoo.dk Nybegynder
18. marts 2003 - 08:28 #2
rettelse:

$conn = mysql_connect("HOST","BRUGERNAVN","PASSWORD");
mysql_select_db("DATAVASE");

$result = mysql_query("SELECT * FROM statistik ORDER BY desc");
while($row = mysql_fetch_array($result)) {
echo "$row[maal]";
echo "<br>";

og den anden:

$conn = mysql_connect("HOST","BRUGERNAVN","PASSWORD");
mysql_select_db("DATAVASE");

$result = mysql_query("SELECT * FROM statistik ORDER BY desc");
while($row = mysql_fetch_array($result)) {
echo "$row[manofmatch]";
echo "<br>";
Avatar billede andy Nybegynder
18. marts 2003 - 08:41 #3
SELECT statistik.maal, statistik.manofthematch ,spiller.navn FROM statistik, spiller WHERE statistik.spillerid=spiller.ID ORDER BY maal, manofthematch DESC LIMIT 10

Viser de 10 spillere der har scoret flest mål. Hvis to spillere har scoret ligemange mål bliver spilleren der er kåret til man of the match flest gange listet først.
Du kan selvfølgelig ændre LIMIT 10 til fx LIMIT 20 for at få vist 20 spillere :)
Avatar billede tefcke Nybegynder
18. marts 2003 - 11:57 #4
andy >> men du får ikke fat i dem som har fået flest man-of-match!

jangravgaard >> der kan minmum bruges 1 select per rangliste (uden din query bliver alt for avanceret)
Avatar billede andy Nybegynder
18. marts 2003 - 16:15 #5
nej, jeg er også lidt usikker på hvad det er Jan vil have vist.

Sorteret efter mål:
SELECT statistik.maal, spiller.navn FROM statistik, spiller WHERE statistik.spillerid=spiller.ID ORDER BY maal DESC LIMIT 10

Efter antal man of the match:
SELECT statistik.manofthematch, spiller.navn FROM statistik, spiller WHERE statistik.spillerid=spiller.ID ORDER BY manofthematch DESC LIMIT 10
Avatar billede jangravgaard Nybegynder
18. marts 2003 - 16:59 #6
I får lov til at dele :-)
mine sætninger kom til at se sådan ud:

SELECT "maal", "navn" FROM "statistik", "spiller" WHERE "spillerid" = "ID" ORDER BY "maal" DESC limit 1

SELECT "manofmatch", "navn" FROM "statistik", "spiller" WHERE "spillerid" = "ID" ORDER BY "manofmatch" DESC LIMIT 1

uvist af hvilken grund får jeg fejl ved at skrive tabelnavn.feltnavn, som andy så korrekt har skrevet. Skidt, det virker, takker for hjælpen.....
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