yarot
29.01.2004, 15:55:20
Witam,
mam problem następujący.
fragment bazy wygląda tak :
[sql:1:61a6ee7165]User (uid, uname)
Typy (idtyp, ile, kurs, stan, uid)[/sql:1:61a6ee7165]
zrobiłem małe podsumowanie
[xml:1:61a6ee7165]
Uname Profit
Jarek +150
Tosia +20
[/xml:1:61a6ee7165]
itd
...
kodem jak niżej i utknąłem bo nie umiem tego posortować wg pola profit.
[php:1:61a6ee7165]<?php
$zapytanie = "SELECT uid, uname FROM user";
$wynik = mysql_query($zapytanie) or die ("Błąd w pytaniu");
while($rezultat = mysql_fetch_array($wynik))
{
$userid = $rezultat[0];
$username = $rezultat[1];
$zapytanie = "SELECT sum(ile) FROM typy WHERE stan>0 and stan<3 AND uid = '$userid'";
$wynik = mysql_query($zapytanie) or die ("Błąd w pytaniu");
$zm_tymcz1 = mysql_fetch_array($wynik);
$obrot = $zm_tymcz1["sum(ile)"];
$zapytanie = "SELECT sum(ile * kurs) as wynik FROM typy WHERE stan=1 AND uid = '$userid'";
$wynik4 = mysql_query($zapytanie4) or die ("Błąd w pytaniu");
$zm_tymczasowa = mysql_fetch_array($wynik4);
$przyszlo = $zm_tymczasowa["wynik"];
$profit = $przyszlo - $obrot;
?>
<tr bgcolor=#f2f2f2><td class=text1><?print$username;?>:</td><td align = right class=text3><?printf ("%.2f", $profit);?></td></tr>
<?};?>
?>[/php:1:61a6ee7165]
Wydaje mi się że można pokombinować też w ten sposób:
Zapytania do bazy :
$wygrane
[sql:1:61a6ee7165]SELECT uid, sum( ile * kurs )
FROM typy
WHERE stan = 1
GROUP BY uid [/sql:1:61a6ee7165]
$ogółem
[sql:1:61a6ee7165]
SELECT uid, sum(ile) FROM typy WHERE stan>0 and stan<3 group by uid[/sql:1:61a6ee7165]
Jak odejmę $ogolem - $wygrane = $profit i wg tego profitu chcę posortować tą listę powyżej.
Nie wiem jak to ugryźć - pomożecie?
spenalzo
29.01.2004, 16:18:58
[sql:1:b6bebbbf98]SELECT uid, (sum(ile) - sum(IF(stan=1,ile*kurs,0))) as profit
FROM typy
WHERE stan>0 and stan<3
GROUP BY uid ORDER BY profit [/sql:1:b6bebbbf98]
:?:
yarot
29.01.2004, 16:31:10
Cytat
:?:
niestety nie działa -> błąd składni
spenalzo
29.01.2004, 17:24:47
A teraz? Przedtem było o jedno ) za dużo.
PS. php Początkujący => Bazy Danych
yarot
30.01.2004, 09:14:37
Cytat
A teraz? Przedtem było o jedno ) za dużo.
PS. php Początkujący => Bazy Danych
Lekko podrasowałem ale pomysł rewelacyjny.
[sql:1:8c06381bc6]SELECT t.uid, (
sum(
IF (
stan = 1, ile * kurs, 0
) ) - sum( ile )
) AS profit, u.uname
FROM typy t, user u
WHERE t.uid = u.uid
and stan > 0 AND stan < 3
GROUP BY uid
ORDER BY profit DESC [/sql:1:8c06381bc6]
Dzięki wielkie. Masz u mnie +
P.S. Dużo nauki przede mną
yarot
6.02.2004, 16:02:05
Tym razem wprowadziłem jeszcze kilka stanów w zmiennej stan i teraz potrzebuję pomocy bo się zamotałem w składni sql-owej.
[sql:1:e178dd25d5]SELECT DATE_FORMAT(datazdarzenia, '%c/%y') as miesiac,
(sum(
case stan
when 5 then (-ile/2)
when 4 then ((kurs-1)*(ile/2))
when 3 then ile
when 2 then -ile
when 1 then (kurs-1)*ile
)
) AS profit FROM `typy`
WHERE stan>0
GROUP BY month(datazdarzenia)
ORDER BY datazdarzenia[/sql:1:e178dd25d5]
Można tak sumować wogóle?
Jeżeli mozna po ifie to chyba po case też?
spenalzo
6.02.2004, 16:05:23
Brakuje zakończenia CASE
[sql:1:b6d68f07c5]SELECT DATE_FORMAT(datazdarzenia, '%c/%y') as miesiac,
(sum(
case stan
when 5 then (-ile/2)
when 4 then ((kurs-1)*(ile/2))
when 3 then ile
when 2 then -ile
when 1 then (kurs-1)*ile
end
)
) AS profit FROM `typy`
WHERE stan>0
GROUP BY month(datazdarzenia)
ORDER BY datazdarzenia[/sql:1:b6d68f07c5]
yarot
6.02.2004, 16:09:29
Wiedziałem że jestem blisko ale nie że aż tak

. Thx
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.