Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Działania arytmetyczne
arfer
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 23.04.2012

Ostrzeżenie: (0%)
-----


Witam,
Mam nastepujace wyniki pobrane z bazy danych:

(SELECT COUNT(wynik_id) FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."') AS wynik1,
(SELECT AVG(miejsce) FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."') AS wynik2,
(SELECT SUM(lider) FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."') AS wynik3


i chcialbym wykonac na nich nastepujace dzialania arytmetyczne:

wynik1 * 0,01 + wynik2 * 0,02 + wynik3 * 0,02

W jaki sposob powinienem to zapisac by jak najplynniej bez obciazania serwera mogl uzyskac wynik tych dzialan?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


  1. SELECT ((COUNT(wynik_id)*.01)+(AVG(miejsce)*0.02)+(SUM(lider)*0.02)) AS wynik FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."'
Go to the top of the page
+Quote Post
arfer
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 23.04.2012

Ostrzeżenie: (0%)
-----


W swoim poscie bardzo skrocilem liczbe i rodzaj zapytan poniewaz chodzilo mi tylko o poznanie metody jak to zrobic a reszte zbudowalbym sobie sam ale teraz juz widze ze w ten sposob co podales Sazian nie bede mogl tego zrobic dlatego bo:

nie zaznaczylem tego ale kryteria where nie sa zawsze takie same - czasem jest sesja_id=5 a innymi razem 1,2,3 itd w zaleznosci od rodzaju wyniku jaki chce uzyskac a w koncowcym zapytaniu sumowym bede chcial je umiescic. Kryteria where ponadto nie roznia sie tylko sesja ale w niektorych wynikach dochodza nowe kryteria jak rok itd dlatego nie moge where sprowawdzic do wspolnego mianownika wszystkich wynikow poniewaz kazdy wynik ma inne kryteria (czesc sie powtarza czesc ma inne). To co pozostaje stale to to ze wyciagane wyniki sa z tabeli wyniki i ze kryterium podstawowe to pobieranie wynikow tylko dla danego usera.

Jeszcze jedna sprawe na ktora chcialbym zwrocic uwage to fakt ze ostateczny wynik tych dzialan arytmetycznych bedzie wykorzystywany w tym samym zapytaniu tak samo jak te pierwsze wyniki (wynik1, wynik2 itd). Na stronie bedzie tabela gdzie w jednej kolumnie bedzie wynik1, w drugiej wynik2 a na koncu wynik (o ktory pytam). Dlatego wszystko musi byc w jednym zapytaniu.

W zwiazku z tym prosilbym o pomoc w zrobeniu tych dzialan arytmetycznych wykorzystujacych wyniki pobrane w taki sposob:
(SELECT COUNT(wynik_id) FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."') AS wynik1,
(SELECT AVG(miejsce) FROM ".DB_WYNIKI." WHERE sesja_id =3 AND user_id='".$_GET['user_id']."') AS wynik2,
(SELECT SUM(lider) FROM ".DB_WYNIKI." WHERE sesja_id =1 AND rok=3 AND user_id='".$_GET['user_id']."') AS wynik3
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Zapytanie z podzapytania:
  1. SELECT wynik1+wynik2+wynik3 FROM
  2. (SELECT (SELECT COUNT(wynik_id) FROM ".DB_WYNIKI." WHERE sesja_id =5 AND user_id='".$_GET['user_id']."') AS wynik1,
  3. (SELECT AVG(miejsce) FROM ".DB_WYNIKI." WHERE sesja_id =3 AND user_id='".$_GET['user_id']."') AS wynik2,
  4. (SELECT SUM(lider) FROM ".DB_WYNIKI." WHERE sesja_id =1 AND rok=3 AND user_id='".$_GET['user_id']."') AS wynik3) x

Ja natomiast jestem zwolenniekiem wykonywania wszystkiego za jednym zapytaniem. Nawet twoje zapytanie można tak wykonać... smile.gif
  1. SELECT Count(case when sesja_id=5 then wynik_id end) wynik1, Avg(case when sesja_id=3 then miejsce end) wynik2, SUM(case when sesja_id=1 then lider end) wynik3 FROM ".DB_WYNIKI" WHERE user_id=3 AND sesja_id IN (1,3,5)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Tu masz odpowiedź: http://forum.php.pl/index.php?s=&showt...t&p=1015507
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:47