Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
yarot
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
[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
Cytat
:?:


niestety nie działa -> błąd składni
spenalzo
A teraz? Przedtem było o jedno ) za dużo.

PS. php Początkujący => Bazy Danych
yarot
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ą smile.gif
yarot
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
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
Wiedziałem że jestem blisko ale nie że aż tak smile.gif. 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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.