Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem.
Forum PHP.pl > Forum > Bazy danych > MySQL
qcu84
Wiatm,

mam problem z napisaniem zapytania ,może ktoś mi coś podpowie:)? Mam tabelę:
  1. CREATE TABLE Pomiar(
  2. id_pacjenta VARCHAR(11) NOT NULL,
  3. datap DATE NOT NULL,
  4. godz TIME NOT NULL,
  5. pomiar_mg INT(3),
  6. PRIMARY KEY (id_pacjenta, datap, godz),
  7. FOREIGN KEY (id_pacjenta) REFERENCES Pacjent (id_pacjenta)
  8. );


Chcę wypisać z niej ostatnie np. 20 pomiarów dla okleslonego id_pacjenta,
więc robię:
  1. SELECT datap, godz, pomiar_mg FROM pomiar WHERE id_pacjenta='xxx' ORDER
  2. BY datap DESC LIMIT 20


z tym nie mam problemu.
Problem pojawia się gdy chcę znaleźć MIN(), MAX() lub AVG() z pośród tych 20 wyników zwróconych przez przytoczone zapytanie. Czy ktoś mógłby mi podpowiedzieć jak to zrobić?

pozdrawiam,
Łukasz
asz
Cytat(qcu84 @ 18.01.2008, 19:41:18 ) *
  1. SELECT datap, godz, pomiar_mg FROM pomiar WHERE id_pacjenta='xxx' ORDER
  2. BY datap DESC LIMIT 20


Problem pojawia się gdy chcę znaleźć MIN(), MAX() lub AVG() z pośród tych 20 wyników zwróconych przez przytoczone zapytanie. Czy ktoś mógłby mi podpowiedzieć jak to zrobić?

Myślę, że powinieneś np. zainteresować się takim selectem:

  1. $sql = "SELECT MAX(pomiar_mg) AS maks FROM pomiar";
  2. $wynik = mysql_query($sql,$polaczenie_z_serwerem);

potem to przypisać jakiejś zmiennej np.:
  1. $tab = mysql_fetch_array($wynik);

Na koniec...
  1. $maks_liczba = $tab["maks"];
  2. echo $maks_liczba;


Powinieneś dostać maks. liczbę z danej kolumny.
qcu84
Już sobie poradziłem, dzięki za pomoc.
asz
Cytat(qcu84 @ 18.01.2008, 21:40:49 ) *
Już sobie poradziłem, dzięki za pomoc.


To może pochwal sie jak to zrobiłes (?) ;-) Tak dla potomnych, którzy natrafiliby na podobny problem za jakiś czas... ;-)
qcu84
Rozwiązanie było niezwykle prost ale zapomniałem że jak się stosuje pod zapytania:)

można to zrobić stosując pod zapytanie:

  1. SELECT min(p.pomiar_mg) , max(p.pomiar_mg) , avg(p.pomiar_mg) FROM (SELECT datap, godz, pomiar_mg FROM pomiar WHERE id_pacjenta='84011710637'
  2. ORDER BY datap DESC LIMIT 20 ) p


AVG jest liczone oczywiście dla iluś tam wyników (czyli w jakimś okresie czasu) naromiast dla min lub max można wyciągnąć datę kiedy taki wynik został zanotowany np. dla max():

  1. SELECT p.pomiar_mg, p.datap, p.godz FROM (SELECT datap, godz, pomiar_mg FROM pomiar WHERE id_pacjenta='84011710637'
  2. ORDER BY datap DESC LIMIT 20 ) p ORDER BY p.pomiar_mg DESC LIMIT 1


nie jest to doskonałe rozwiązane, gdyż jeśli wśród tych 20 wyników będzie kilka o takiej samej wartości maksymalnej to zostanie zwrócona data i godzina wykonania aby jednego z nich.

pozdawiam
asz
Cytat(qcu84 @ 19.01.2008, 11:17:06 ) *
Rozwiązanie było niezwykle prost ale zapomniałem że jak się stosuje pod zapytania:)


Dzieki. Szczerze mówiąc to też przyszły mi do głowy podzapytania.
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.