Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pobraniem wybranych rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
El.Kurczako
Witam

W jednej tabeli mam listę aptek (w skrócie: id, nazwa, itp).
W drugiej mam kosztorysy (id, id_apteki, data, status, dane1, dane2, dane3, itp).

Nowy kosztorys dla apteki jest zapisywany jako nowy rekord. Każda zmiana w danym kosztorysie powoduje zapis nowego rekordu (dla zachowania historii zmian).
Każdy z kosztorysów może przyjąć odpowiedni status (1, 2, 3, 4, 5). Zmiana może, ale nie musi, pociągać za sobą zmianę statusu. Zmiana odbywa się zawsze w górę, co jeden (czyli z 1 można przejść tylko na 2, nie można się cofnąć - z 4 przejść na 3).

Zatem jeden kosztorys może być zapisany w kilku(nastu) rekordach, ze statusami 1, 1, 2, 3, 3, 3, 4, 5. Przypominam, rekord może zmienić się o jeden i tylko w górę, zatem nie może mieć miejsca sytuacja 1, 2, 5.

Problem jest teraz przy wyciągnięciu z bazy tych aptek, których kosztorys ma status np. 3 - ale jako ostatni status, tzn nie może być to być apteka, której kosztorys ma obecnie status 4, a jego rekord ze statusem 3 też figuruje i w efekcie byłby wyświetlony. Chodzi tylko o te rekordy, które nie mają statusu większego niż 3.

Mam nadzieję, iż w miarę jasno wytłumaczyłem o co chodzi winksmiley.jpg

UPDATE
Przykładowe rekordy kosztorysów
id | id_apteki | data | status
1 | 1 | (...) | 1
2 | 1 | (...) | 2
3 | 1 | (...) | 3
4 | 2 | (...) | 1
5 | 2 | (...) | 1
6 | 2 | (...) | 2
7 | 2 | (...) | 3
8 | 2 | (...) | 4

I z tych danych, jeżeli chcę wyświetlić aptekę, której status (obecny, ostatni) jest 3, powinien pokazać się tylko rekord apteki o id = 1 (apteka o id = 2 też ma wpis kosztorysu ze statusem 3, ale ostateczny status dla kosztorysu jest 4, zatem ta apteka nie ma być uwzględniona w wyniku).
mrok
moze tak?

  1. SELECT id_apteki FROM kosztorysy GROUP BY id_apteki
  2. HAVING max(STATUS) = 3;
El.Kurczako
Witam

Pięknie dziękuję smile.gif Już klikam 'Pomógł'.
Dodałem od siebie jeszcze kawałek kodu, i ostatecznie wygląda on mniej więcej tak:
  1. SELECT id_apteki, MAX(STATUS) AS STATUS
  2. FROM kosztorysy GROUP BY id_apteki
  3. HAVING MAX(STATUS) = 3;


Dodałem 'MAX(status) AS status, gdyż bez tego wyświetlało mi status '1' a chciałem '3'.

Pozdrawiam guitar.gif
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.