Autor Zpráva
David 92
Profil *
Ahoj, řeším teď takové dilema:
mám datábazi a v ní: id, datum, stav, kurz, sazka

datum - datum zápasu
stav - výherní, proherní
kurz - číslo
sazka - cislo

Potřeboval bych nyní vypsat datumy a k nim spočítat aktuální zisk, což je samo o sobe lehké, problém nastává s duplicidama.
01.11.2023 výherní +1000=> +1000
02.11.2023 výherní +500 => +1500
03.11.2023 proherní -1000 => +500
04.11.2023 proherní -1000 => -500
04.11.2023 výherní +1000 => +500
05.11.2023 výherní +1000 => +1500 


$sql = dibi::fetchAll("SELECT id, datum, stav, kurz SUM(kurz*(sazka*500)-(sazka*500)) AS spocti_vyhru, SUM(sazka*500) AS spocti_prohru
FROM zapasy
WHERE (stav = '1' OR  stav = '2')
GROUP BY DATE(datum), stav
ORDER BY datum ASC");

04.11.2023 je duplicidní, ikdyž je použit GROUP BY datum a je to z toho důvodu, že ten den byla, jak výhra tak i prohra (zde bych potřeboval, aby to spočítalo výhru-prohru) tedy jen jeden záznam (04.11.2023 proherní, výherní -1000 +1000 => +500), lze toho nějak docílit?
Kajman
Profil
Mělo by jít např. něco takového...

SELECT datum,
       Sum(pocet_vyher)   pocet_vyher,
       Sum(pocet_proher)  pocet_proher,
       Sum(spocti_vyhru)  spocti_vyhru,
       Sum(spocti_prohru) spocti_prohru
FROM   (SELECT Date(datum)               datum,
               Count(*)                  AS pocet_vyher,
               0                         AS pocet_proher,
               Sum(kurz * sazka - sazka) AS spocti_vyhru,
               0                         AS spocti_prohru
        FROM   zapasy
        WHERE  stav = '1'
        GROUP  BY Date(datum)
        UNION ALL
        SELECT Date(datum) datum,
               0           AS pocet_vyher,
               Count(*)    AS pocet_proher,
               0           AS spocti_vyhru,
               Sum(sazka)  AS spocti_prohru
        FROM   zapasy
        WHERE  stav = '2'
        GROUP  BY Date(datum)) x
GROUP  BY datum
ORDER  BY datum
David 92
Profil *
Díky vypadá, že funguje, jen asi nejsem schopen spočítat nyní aktuální zisk dle datumu.

v PHP pak mám kod:

if($row_graf['stav'] == '1'){
$stav_konta = +$row_graf['spocti_vyhru'];
} elseif($row_graf['stav'] == '2'){
$stav_konta = -$row_graf['spocti_prohru'];
} else { 
$stav_konta = 0;
}

$aktualni_penize_pole[] = $stav_konta;
$vysledek_komplet = implode(', ', (array)$aktualni_penize_pole);
$aktualni_penize = array_sum($aktualni_penize_pole); 

echo $aktualni_penize;

počítá to dobře, jen do doby, kde opět v jeden den je výhra i prohra >> prohru to ignoruje, jakmile je, ale jen jeden den ztrátový odečte to správně...

pokud přidám zase GROUP BY datum,stav tak to počítá správně jak má, ale opět s dvojím datumem

Moc díky
Kajman
Profil
Před cyklem si dáte
$aktualni_penize = 0;
A místo toho, co jste poslal
$aktualni_penize = $aktualni_penize + $row_graf['spocti_vyhru'] - $row_graf['spocti_prohru'];
echo $aktualni_penize;
David 92
Profil *
Díky, vypadá, že funguje parádně :)

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:

0