Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie do dwóch tabel - czy tego się nie obejdzie?
NortoN
post 14.04.2002, 07:32:09
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
Go to the top of the page
+Quote Post
carampuc
post 18.04.2002, 09:54:05
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
Go to the top of the page
+Quote Post
NortoN
post 19.04.2002, 17:40:20
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.04.2002
Skąd: Łowicz

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


dzięki za podpowiedź smile.gif
Go to the top of the page
+Quote Post
Markiz
post 28.04.2002, 11:58:11
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.04.2002
Skąd: Gdynia

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


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


--------------------
Markiz
wk.prv.pl
Go to the top of the page
+Quote Post
NortoN
post 29.04.2002, 07:05:14
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.04.2002
Skąd: Łowicz

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


eliminacja duplikatów DISTINCT
limit dowolna ilość LIMIT X
sortowanie SORT (ASC/DESC)
Go to the top of the page
+Quote Post
Markiz
post 29.04.2002, 14:01:28
Post #6





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 27.04.2002
Skąd: Gdynia

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


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


--------------------
Markiz
wk.prv.pl
Go to the top of the page
+Quote Post
NortoN
post 29.04.2002, 14:13:23
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.04.2002
Skąd: Łowicz

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


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
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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 19:48