![]() |
![]() ![]() |
![]() |
![]()
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 (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 musi się równać 0 2. są uwagi przeczytane 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
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 -------------------- |
|
|
![]()
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.
|
|
|
![]()
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
![]() 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
Ten post edytował TomASS 4.06.2010, 13:46:18 -------------------- |
|
|
![]()
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ć.
|
|
|
![]()
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ń
![]() Ten post edytował TomASS 4.06.2010, 14:03:23 -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:01 |