Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z zapytaniem.
qcu84
post 18.01.2008, 19:41:18
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.01.2008

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
asz
post 18.01.2008, 20:44:07
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 22.08.2007

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


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.
Go to the top of the page
+Quote Post
qcu84
post 18.01.2008, 21:40:49
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.01.2008

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


Już sobie poradziłem, dzięki za pomoc.
Go to the top of the page
+Quote Post
asz
post 19.01.2008, 08:55:56
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 22.08.2007

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


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... ;-)
Go to the top of the page
+Quote Post
qcu84
post 19.01.2008, 11:17:06
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.01.2008

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


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
Go to the top of the page
+Quote Post
asz
post 19.01.2008, 13:11:54
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 1
Dołączył: 22.08.2007

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


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.
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:27