Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Działania arytmetyczne
Forum PHP.pl > Forum > Bazy danych > MySQL
arfer
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?
sazian
  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']."'
arfer
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
mmmmmmm
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)
mmmmmmm
Tu masz odpowiedź: http://forum.php.pl/index.php?s=&showt...t&p=1015507
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-2024 Invision Power Services, Inc.