Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z pobraniem wybranych rekordów
El.Kurczako
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

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


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).

Ten post edytował El.Kurczako 5.05.2008, 13:13:54
Go to the top of the page
+Quote Post
mrok
post
Post #2





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

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


moze tak?

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


--------------------
Go to the top of the page
+Quote Post
El.Kurczako
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

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


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

Ten post edytował El.Kurczako 6.05.2008, 08:18:53
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: 20.08.2025 - 07:08