Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> informcje - nowe/przeczytane/brak
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cześć.

Mam rekordy "zamówienia", mam do tego dwie tabele.

1. zamowienia_uwagi [ID, ID_zamowienia, Tresc] w relacji wiele do jednego z tabela
  1. zamowienia
(jedno zamówienie może mieć kilka uwag)
2. zamowienia_uwagi_przeczytane [ID, ID_user, ID_uwaga, DataPrzeczytania] w relacji wiele do jednego z zamowienia_uwagi

Mam dwie zmienne $id_user oraz $id_zamowienie.
Chciałbym teraz sprawdzić (najlepiej jednym zapytaniem) status wszystkich uwag do danego zamówienia
1. brak uwag
  1. SELECT count(*) FROM zamowienia_uwagi WHERE ID_zamowienia=$id_zamowienie
musi się równać 0
2. są uwagi przeczytane
  1. SELECT ID FROM zamowienia_uwagi WHERE ID_zamowienia=$id_zamowienie
i "mozolne" sprawdzenie w pętli czy już zalogowany użytkownik ($id_user) widział uwagi
3. jw tylko czy są nieprzeczytane uwagi


Sprawdzanie w 3 pętalch
  1. while(zamowienia){
  2. while(uwagi){
  3. while(przeczytane){
  4. }
  5. }
  6. }

jest chyba kiepskim pomysłem :/ Ma może ktoś pomysł jak po podaniu ID_user oraz ID_zamowienie wyciągnąć czy są uwagi, a jak są to czy są jakieś przeczytane czy nie (nie interesuje mnie treść tych uwag)


Dzięki wielkie




--------------------
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Pomocne okaże się tutaj pewnie EXISTS oraz NOT EXISTS dla (odpowiednio) uwag przeczytanych oraz nieprzeczytanych. Możesz również użyć LEFT JOIN i jeżeli zamowienia_uwagi_przeczytane.ID będzie NULLem, to oznaczać będzie, że uwaga nie została przeczytana.
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


To dzięki NOT EXISTS mam już tylko dwa zpaytania smile.gif

1. sprawdzam czy są uwagi
2. sprawdzam czy są jakieś nieprzeczytane


Tylko czy EXISTS nie jest po prostu zapytaniem w zapytaniu? i czy nie uzyskam efektu (złożoność obliczeniowa n^2) takiego samego jak

  1. while(uwag){
  2. while(przeczytane){
  3. }
  4. }


Ten post edytował TomASS 4.06.2010, 13:46:18


--------------------
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Tak, EXISTS będzie się wykonywał dla każdego rekordu z osobna, ale wbrew pozorom powinien zadziałać w tym przypadku szybciej niż zwykłe złączenie tabel. Jak zresztą sama nazwa wskazuje: EXISTS służy do tego by sprawdzić czy jakiś tam rekord istnieje, a przecież o to Ci chodzi. Nie potrzebujesz łączyć tabel by to sprawdzić.
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


dzięki, przynajmniej ograniczy się ilość zapytań smile.gif

Ten post edytował TomASS 4.06.2010, 14:03:23


--------------------
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: 19.08.2025 - 16:01