Autor Zpráva
tazzys
Profil
Dobrý den, mam tabulku na výpočet hvězd ze zápasu nhl kde 1. hvězda ma 3 body, 2. hvězda 2 body a 3.hvězda 1 bod. Nejdřív to počíta počet jednotlivých hvězd a poté počítá sloupec body.

Jenže mě to počítá špatně. Hledal sem po netu a našel sem funkci distinct on jenže nevím jak ji importovat do tohoto scriptu, pomůže někdo ?
<table class="samples"><tr><th>Pořadí</th><th>Jméno</th><th>Tým</th><th>Pozice</th><th>1.Hvězdou</th><th>2.Hvězdou</th><th>3.Hvězdou</th><th>Bodů</th></tr>


<?php
$dotaz=mysql_query("SELECT
    p.jmeno, 
    p.id,
    p.tym, 
    p.pozice,
    count(h1.hvezda1) as hvezda1,
    count(h2.hvezda2) as hvezda2,
        count(h3.hvezda3) as hvezda3,
    (count(h1.hvezda1)*3)+(count(h2.hvezda2)*2)+(count(h3.hvezda3)*1) as body 
from   system_players p
left   join system_zapasy h1
on     (p.id = h1.hvezda1 and h1.schvaleno = 'ano' and h1.cup = 'ne')
left   join system_zapasy h2
on     (p.id = h2.hvezda2 and h2.schvaleno = 'ano' and h2.cup = 'ne')
left   join system_zapasy h3
on     (p.id = h3.hvezda3 and h3.schvaleno = 'ano' and h3.cup = 'ne')
group  by h1.hvezda1 desc, h2.hvezda2 desc, h3.hvezda3 desc order by body desc limit 0,20") or die(mysql_error());

$i=1;
while($row=mysql_fetch_assoc($dotaz)){
echo "<tr><td>".$i++.".</td><td>".$row["jmeno"]."</td><td>".$row["tym"]."</td><td>".$row["pozice"]."</td>";
echo"<td>".$row["hvezda1"]."x</td><td>".$row["hvezda2"]."x</td><td>".$row["hvezda3"]."x</td><td>".$row["body"]."</td> </tr>";
}

?>
</table>
Kajman
Profil
Zkuste
count(distinct h1.primarniklicztabulkysystem_zapasy)

Případně připojovat již zgroupovaná data. Něco jako

from   system_players p
left join  (select hvezda1, count(*) pocet_hvezd1 from system_zapasy where schvaleno = 'ano' and cup = 'ne' group by hvezda1) h1
on     (p.id = h1.hvezda1)
tazzys
Profil
bohužel toto nefunguje :/
Kajman
Profil
Jak konkrétně to nefunguje? Jak vypadají kompletní dotazy po těchto úpravách, které zkoušíte? Jaký je primární klíč z tabulky system_zapasy?

Kompletní dotaz v druhé variantě musí ošetřit i null hodnoty počtů alespoň při sčítání...
SELECT p.jmeno,
       p.id,
       p.tym,
       p.pozice,
       h1.pocet_hvezd1 AS hvezda1,
       h2.pocet_hvezd2 AS hvezda2,  
       h3.pocet_hvezd3 AS hvezda3,
       ( Ifnull(h1.pocet_hvezd1, 0) * 3 ) 
         + ( Ifnull(h2.pocet_hvezd2, 0) * 2 ) 
         + ( Ifnull(h3.pocet_hvezd3, 0) ) AS body
FROM   system_players p
       LEFT JOIN (SELECT hvezda1,
                         Count(*) pocet_hvezd1
                  FROM   system_zapasy
                  WHERE  schvaleno = 'ano'
                         AND cup = 'ne'
                  GROUP  BY hvezda1) h1
              ON ( p.id = h1.hvezda1 )
       LEFT JOIN (SELECT hvezda2,
                         Count(*) pocet_hvezd2
                  FROM   system_zapasy
                  WHERE  schvaleno = 'ano'
                         AND cup = 'ne'
                  GROUP  BY hvezda2) h2
              ON ( p.id = h2.hvezda2 )
       LEFT JOIN (SELECT hvezda3,
                         Count(*) pocet_hvezd3
                  FROM   system_zapasy
                  WHERE  schvaleno = 'ano'
                         AND cup = 'ne'
                  GROUP  BY hvezda3) h3
              ON ( p.id = h3.hvezda3 )
ORDER  BY body DESC
LIMIT  0, 20

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: