![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 14.04.2002 Skąd: Łowicz Ostrzeżenie: (0%) ![]() ![]() |
Największy problem mam z tym iż zapytanie to pobiera prawidłowe wartości z pierwszej i z drugiej tabeli i je sumuje
w pierwszej mam bannery a w drugiej mam strefy (ZONES) na jakich bannery mogą być wyświetlane $query = @mysql_query( "SELECT DISTINCT $zone_table.bannerID as bannerID, $banner_table.waga as waga FROM $banner_table, $zone_table WHERE $banner_table.ban_kred >= 1 AND $banner_table.rozmiar = '$rozmiar' AND $zone_table.bannerID != '$id' AND $zone_table.zoneID = '$idz' "); w tym przypadku można powiedzieć że jest OK oczywiście jeszcze musiałem zastosować DISTINCT bo mi się rekordy dublowały ALE jeżeli dokładam jeszcze inne warunki dla pierwszej tabeli np: $banner_table.czy_banner_aktywny = 'T' i jeszcze inne to wtedy pokazuje bannery które spełniają warunek czyli są aktywne ale również i te które nie są aktywne ponieważ należą do strefy (ZONE) bo spełniaja warunek w drugiej tablicy. Zapytanie poprostu oddzielnie sprawdza warunki dla tabeli pierwszej i dla tabeli drugiej a jak to zrobić aby obojętnie ile podamy tabel zapytanie sprawdzało warunki dla wszystkich tabel razem a nie odzdzielnie. Znalezłem coś takiego jak EXISTS który używa podzapytania jako warunku ale nie wiem czy można w moim przypadku tego użyć pozdrawiam NortoN |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 15.03.2002 Skąd: Gdańśk Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
PO PIERWSZE :cry: Zapytanie jakie napisałeś wybiera Ci kombinację wszystkich rekordów z tabeli 1 z wszystkimi rekordami w tabeli 2 => ilość rekordów wynikowych = ilość rekordów tabeli 1 * ilość rekordów tabeli 2. DISTINCT i warunki nieco ograniczyły efekt... Z punktu widzenia optyamlizacji - ZABÓJSTWO dla bazy danych. Musisz jakość połączyć te dwie tabele, po jakimś polu, które będzie obecne w obu, np: SELECT $zone_table.bannerID as bannerID, $banner_table.waga as waga FROM $banner_table, $zone_table WHERE $banner_table.zoneID = $zone_table.zoneID ... i dalej reszta warunków. PO DRUGIE :wink: Zainteresuj się SELECTEM z poleceniem LEFT JOIN Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:21 |