Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do dwóch tabel - czy tego się nie obejdzie?
Forum PHP.pl > Forum > Bazy danych > MySQL
NortoN
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
carampuc
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
NortoN
dzięki za podpowiedź smile.gif
Markiz
A jak rozwiązać taki problem:

Chcę pobrać z dwóch tabel dane, posortowane wg visits z limitem do 5 wyświetleń
Ale żeby one się nie nakładały...
NortoN
eliminacja duplikatów DISTINCT
limit dowolna ilość LIMIT X
sortowanie SORT (ASC/DESC)
Markiz
Cytat
eliminacja duplikatów DISTINCT  
limit dowolna ilość LIMIT X
sortowanie SORT (ASC/DESC)


No a powiedz mi... no bo jeżeli wpiszę:
"SELECT DISTINCT id, tytul FROM wk_news"
To pokaże mi bez duplikatów fakt, ale jak ja potrzebuje pobrac dane z dwoch tabel to już lipa.
Próbowałem robić coś takiego:
"SELECT DISTINCT id, tytul FROM wk_news, tdb_news"
I jeszzce wiele innych kombinacji, szukałem też w manualach i ... :/
lipa

Za pomoc dziękuję...
NortoN
przyjzyj sie dookładnie mojemu postowi to jest select zwracający się do dwóch tabel, przestudiuj go dokładnie, wystarczy że pozamieniasz sobie dane i masz gotowca
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.