Avatar billede mazey Praktikant
26. juni 2005 - 00:24 Der er 15 kommentarer og
1 løsning

Udtræk fra database til sammentælling

Hej Eksperter...
Jeg skal se om jeg kan formulere dette, så det er forståeligt :D

Jeg har i min database en tabel med en masse rækker i.
tabellen består af et id, et spiller id og en score.

hver spiller kan oprette forskellige antal scores

Det jeg gerne vil er at kunne er at lægge disse scores sammen for hver spiller.

Jeg har bare ikke kunnet få det til at virke...

Det jeg har forsøgt mig med, ser således ud:
<?
$top3gnmb = mysql_query("SELECT * FROM statscore ");
?>

<? while($gnmtop3 = mysql_fetch_array($top3gnmb)){
            $gscoreid = $gnmtop3[statscore_spid]; $top3b2 = mysql_query("SELECT * FROM statscore WHERE $gscoreid = statscore_spid ORDER BY statscore_total ");
while($gnmtop32 = mysql_fetch_array($top3b2)){
         
$sammen = $sammen + $gnmtop32[statscore_total];
  }}
          echo $sammen;
          ?>

Det returnerer dog (tror jeg) det samlede resultat for alle spillere.
Jeg skal gerne have den til at returnere samlet score for spiller 1, spiller 2, spiller 3.... osv!

Er der nogen med en idé dertil, som er til at gå til for en nybegynder?

På forhånd tak!
Avatar billede mazey Praktikant
26. juni 2005 - 00:25 #1
Lige en lille fejl i koden... den ser således ud:

<?
$top3gnmb = mysql_query("SELECT * FROM statscore ");
?>

<? while($gnmtop3 = mysql_fetch_array($top3gnmb)){
            $gscoreid = $gnmtop3[statscore_spid];
$top3b2 = mysql_query("SELECT * FROM statscore WHERE $gscoreid = statscore_spid ORDER BY statscore_total ");
while($gnmtop32 = mysql_fetch_array($top3b2)){
         
$sammen = $sammen + $gnmtop32[statscore_total];
  }}
          echo $sammen;
          ?>
Avatar billede bromer Nybegynder
26. juni 2005 - 00:40 #2
Det burde være ret simpelt at lave i en query med en sum og en group by i een SQL sætning. Hvis du lige poster din databasestruktur så skriver jeg den gerne for dig.
Avatar billede bromer Nybegynder
26. juni 2005 - 00:41 #3
Det kunne jeg så se at du allerede havde gjort lidt.. prøv med denne

select spiller_id,sum(score) score from table group by spiller_id
Avatar billede bromer Nybegynder
26. juni 2005 - 00:42 #4
det burde give dig output i 2 kollonner, spiller id og spillerens pointsats.
Avatar billede mazey Praktikant
26. juni 2005 - 00:42 #5
Jeg poster gerne min databasestruktur men jeg advarer dig om at den er lidt lang!..

Men here goes:

statscore_id  int(11)    Nej    auto_increment             
  statscore_kid  int(11)    Nej  0               
  statscore_spid  int(11)    Nej  0               
  statscore_1  varchar(25) latin1_swedish_ci  Nej                 
  statscore_2  varchar(25) latin1_swedish_ci  Nej                 
  statscore_3  varchar(25) latin1_swedish_ci  Nej                 
  statscore_4  varchar(25) latin1_swedish_ci  Nej                 
  statscore_5  varchar(25) latin1_swedish_ci  Nej                 
  statscore_6  varchar(25) latin1_swedish_ci  Nej                 
  statscore_7  varchar(25) latin1_swedish_ci  Nej                 
  statscore_8  varchar(25) latin1_swedish_ci  Nej                 
  statscore_9  varchar(25) latin1_swedish_ci  Nej                 
  statscore_10  varchar(25) latin1_swedish_ci  Nej                 
  statscore_11  varchar(25) latin1_swedish_ci  Nej                 
  statscore_12  varchar(25) latin1_swedish_ci  Nej                 
  statscore_13  varchar(25) latin1_swedish_ci  Nej                 
  statscore_14  varchar(25) latin1_swedish_ci  Nej                 
  statscore_15  varchar(25) latin1_swedish_ci  Nej                 
  statscore_16  varchar(25) latin1_swedish_ci  Nej                 
  statscore_17  varchar(25) latin1_swedish_ci  Nej                 
  statscore_18  varchar(25) latin1_swedish_ci  Nej                 
  statscore_reg  varchar(25) latin1_swedish_ci  Nej                 
  statscore_putt  varchar(25) latin1_swedish_ci  Nej                 
  statscore_fair  varchar(25) latin1_swedish_ci  Nej                 
  statscore_dato  varchar(25) latin1_swedish_ci  Nej                 
  statscore_total  varchar(25) latin1_swedish_ci  Nej                 
  statscore_bird  varchar(10) latin1_swedish_ci
Avatar billede mazey Praktikant
26. juni 2005 - 00:47 #6
<?
            $top3b2 = mysql_query("SELECT statscore_spid, statscore_total FROM statscore GROUP BY statscore_spid ");
while($gnmtop32 = mysql_fetch_array($top3b2)){
         
          ?>
          <?
          $sammen = $sammen + $gnmtop32[statscore_total];
       
          ?>
         
          <?
       
          }
          echo $sammen;
          ?>

Det den gør er så at tage spiller 1's første score og lægger den sammen med spiller 2's første score... osv...
Avatar billede bromer Nybegynder
26. juni 2005 - 00:50 #7
ja.. men jeg ser heller ikke hvorfor du gerne vil have tallene lagt sammen. Den query gør jo det hele for dig. Det eneste du skal gøre er vel at køre resultatsættet igennem og printe det?
Avatar billede mazey Praktikant
26. juni 2005 - 00:52 #8
Jamen det vil jeg mene jeg har forsøgt....

(nu er jeg stadig lidt grøn i det her....)

<?
            $top3b2 = mysql_query("SELECT statscore_spid, statscore_total FROM statscore GROUP BY statscore_spid ");
while($gnmtop32 = mysql_fetch_array($top3b2)){
         
          ?>
          <?
        echo $gnmtop32[statscore_total];
       
          ?>
         
          <?
       
          }
         
          ?>
Hvis jeg gør som ovenstående, echoer den stadig kun det første resultat fra hver spiller...
Avatar billede mazey Praktikant
26. juni 2005 - 00:53 #9
Hvis man laver en GROUP BY i en sql, gruperer den vel også kun så der er en række af hver... den tæller dem vel ikke sammen?
Avatar billede bromer Nybegynder
26. juni 2005 - 01:02 #10
GROUP BY [1] klapper et antal rækker sammen til een. Det er så muligt at udføre en række agegrate functions på rækkerne. Disse funktioner har alle den egenskab at når de udføres på en mængde rækker bliver resultatet een række. Dette er for eksempel sum, avg (gennemsnit), max og min. Den query jeg gav dig lægger alle points (for een bruger) sammen. Giver det mening?

[1] http://dev.mysql.com/doc/mysql/en/select.html
Avatar billede mazey Praktikant
26. juni 2005 - 01:07 #11
Ja det giver mening, men jeg kan så bare ikke forstå at denne kode så ikke returnere den samlede score for spillerne....
<?
$top3b2 = mysql_query("SELECT statscore_spid, statscore_total FROM statscore GROUP BY statscore_spid ");
while($gnmtop32 = mysql_fetch_array($top3b2)){
         
       
        echo $gnmtop32[statscore_total];
       
          }
         
          ?>

Det er meget muligt at jeg bare ikke har fattet konceptet i det, men skriver jeg det som ovenstående, får jeg 2 resultater ud (det første resultat fra spiller 1 og det første fra spiller 2) (ligenu er der kun 2 spillere, men både spiller 1 og 2 har flere indtastede scores...)
Avatar billede bromer Nybegynder
26. juni 2005 - 01:11 #12
Jeg missede lige dit tabeldesign. Er det korrekt antaget at hver spiller kan have flere rækker hvor den eneste information der er vigtig (lige i denne debat anyway) er statscore_total. Og din kode virker ikke fordi du ikke har kopiret min sql korrekt. Jeg havde jo en sum. Mon ikke en lille ændring i din kode virker så:

<?
$top3b2 = mysql_query("SELECT statscore_spid, sum(statscore_total) statscore_total FROM statscore GROUP BY statscore_spid ");
while($gnmtop32 = mysql_fetch_array($top3b2)){       
  echo $gnmtop32[statscore_total];   
}
?>
Avatar billede mazey Praktikant
26. juni 2005 - 01:15 #13
:D

Jo det kunne være... du har helt ret, men jeg antog bare at den "Sum" du skrev var en indikation af at det var der score_total skulle være... min fejl!... Det ser ud til at virke!... rigtig dejlgt... smider du et svar?
Avatar billede bromer Nybegynder
26. juni 2005 - 01:18 #14
jamen det gør jeg da..

NB: Du burde lige smutte fordi det link jeg sendte og læse GROUP BY sektionen.
Avatar billede mazey Praktikant
26. juni 2005 - 01:19 #15
Det vil jeg gøre... tak for hjælpen!
Avatar billede bromer Nybegynder
26. juni 2005 - 01:21 #16
så lidt.. tak for points :)
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