Avatar billede stieper Nybegynder
31. maj 2006 - 19:23 Der er 13 kommentarer

Mysql sum() problem

Jeg har følgende kode:
$sql_red = "SELECT t1.player_teamid, Sum(t1.type * 0.5) AS totalred, t2.holdnavn FROM bookings AS t1, tilmelding AS t2 WHERE t1.player_teamid = t2.teamid AND t1.type = '2' AND t1.season = $season_active GROUP BY player_teamid ORDER BY totalred DESC LIMIT 2";
      $result_red = mysql_query($sql_red) or die(mysql_error());
      while($row_red = mysql_fetch_array($result_red)){;
      ?>
      <tr>
        <td><?=$row_red['holdnavn']?></td>
        <td class="stilling" align="center"><? printf("%d", $row_red['totalred']);?></td>
      </tr>
      <tr>
      <?php } ?>


I bookings table har jeg 2 hold som har bookings med type=2, det ene hold har 3 entries med type= 2, og det andet hold har 1 entry med  type=2.

Men min query returnerer:
Flying Ducks      6
Team Jimbo     1

Hvilket i stedet skulle være:
Flying Ducks      3  <-------
Team Jimbo     1

jeg ganger jo med 0.5 i min Sum(t1.type * 0.5)

Hvad er problemet her?

Kan man ikke køre sum() på t1.type INDEN man har sat t1.type= '2'
??

På forhånd tak for hjælpen.
Avatar billede hmortensen Nybegynder
31. maj 2006 - 19:28 #1
Du skal gange uden for parentesen.
Avatar billede stieper Nybegynder
31. maj 2006 - 19:33 #2
Jeg får nøjagtig samme resultat med:

Sum(t1.type * 0.5)
Sum(t1.type) * (0.5)
Avatar billede stieper Nybegynder
31. maj 2006 - 19:35 #3
For overblikket kan I se: http://www.stieper.dk/resultater.php

Det er tabellen i højre side jeg roder med...

de to øverste med røde og gule kort virker ikke... :-(

Men nu tager vi lige den med røde kort først.
Avatar billede michael_stim Ekspert
31. maj 2006 - 19:36 #4
(Sum(t1.type) * 0.5) AS ...
Avatar billede stieper Nybegynder
31. maj 2006 - 19:39 #5
Desværre - samme resultat :-(
Avatar billede michael_stim Ekspert
31. maj 2006 - 19:41 #6
FROM bookings AS t1, tilmelding AS t2
rettes til:
FROM bookings t1, tilmelding t2
Avatar billede stieper Nybegynder
31. maj 2006 - 19:42 #7
har lagt hele koden for siden her: http://www.stieper.dk/resultater.phps

Det er kun den sidste del der er bøvl med (har lavet en note i koden så i kan se hvor problemerne starter)
Avatar billede stieper Nybegynder
31. maj 2006 - 19:43 #8
@michael_stim:

Det hjalp desværre heller ikke....
Avatar billede stieper Nybegynder
31. maj 2006 - 19:50 #9
Har lige prøvet i phpmyadmin....

SQL-forespørgsel:
SELECT t1.player_teamid, Sum( t1.type ) AS totalred, t2.holdnavn
FROM bookings AS t1, tilmelding AS t2
WHERE t1.player_teamid = t2.teamid
AND t1.type = '2'
AND t1.season =29
GROUP BY t1.player_teamid
ORDER BY totalred DESC
LIMIT 2


Giver:
player_teamid totalred holdnavn
928659             12     Flying Ducks
930812               2     Team Jimbo

Det er jo helt sort! Den nederste på 2 er god nok, da Team Jimbo har 1 rødt kort, men Flying Ducks har 3 røde kort - hvordan kan den summe 3*2 til 12??
Avatar billede stieper Nybegynder
31. maj 2006 - 20:00 #10
Har fundet ud af, at det er min join funktion der laver ravage, da:

SELECT t1.player_teamid, SUM( t1.type ) AS totalred
FROM bookings AS t1
WHERE t1.type =2
GROUP BY t1.player_teamid
ORDER BY totalred DESC
LIMIT 0 , 30

giver:

player_teamid totalred
928659             6
930812      2
Avatar billede stieper Nybegynder
31. maj 2006 - 20:19 #11
Her er lige et breakdown, da jeg ikke er kommet videre:

I min tabel "tilmelding" har jeg de enkelte hold flere gange, men med forskellige season_tilmeld (den jeg skal bruge er season_tilmeld=29).

I min bookings har jeg type= 1 eller 2 (1=gult kort, 2=rødt kort)

Jeg har player_teamid i bookings, og teamid i tilmelding som skal joines før jeg kan trække holdnavnet ud fra min tilmelding tabel.

Men det går galt når jeg forsøger at joine dem - nogle der er hardcore til join funktioner som kan forklare mig hvad jeg gør galt, og hvordan det skal gøres i stedet?
Avatar billede stieper Nybegynder
31. maj 2006 - 20:20 #12
Så fandt jeg ud af det:

$sql_red = "SELECT t1.player_teamid, COUNT(t1.type) AS totalred, t2.holdnavn FROM bookings AS t1, tilmelding AS t2 WHERE t2.season_tilmeld = 29 AND t1.player_teamid = t2.teamid AND t1.type = '2' AND t1.season = $season_active GROUP BY t1.player_teamid ORDER BY totalred DESC LIMIT 2";
Avatar billede stieper Nybegynder
31. maj 2006 - 20:21 #13
manglede at sætte min condition t2.season_tilmeld = 29, og nu "Counter" jeg bare felter hvor type=2 i stedet.. virker også mere logisk.
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