sebekzosw
7.05.2014, 20:59:51
Witam,
mam taką tabelę:
clients
id
name
surname
oraz tabela
clients_address
id
ulica
nr_budynku
nr_lokalu
kod_pocztowy
miasto
typ
id_klienta
są to relacje jeden do wielu (jeden klient może mieć wiele adresów - zameldowania / zamieszkania / korespondencji)
chciałbym znaleźć wszystkich klientów co mieszkają w Warszawie
Niby prosta sprawa, tylko że początek zapytania jest narzucony:
SELECT * FROM `clients`
powinno być left join `clients_addres` tylko jak zrobić, żeby to było szybkie i optymalne. Może być dziesiątki tysięcy klientów i adresów.
Turson
7.05.2014, 22:19:34
SELECT * FROM clients LEFT JOIN clients_adress ON clients_adress.id_klienta = clients.id WHERE clients_adress.miasto = 'Warszawa'
żeby było optymalniej, zamiast * podaj konkretne kolumny
Pyton_000
7.05.2014, 22:32:49
Szybciej chyba jednak by bylo jakbys robił zapytanie z drugiej strony.
sebekzosw
7.05.2014, 23:01:33
Turson, to Twoje zapytanie to znam - ale bezsensu jest. Bo jak np mam 10tyś klientów, a 500 z nich ma 3 adresy a reszta po 1, to zwróci mi 11.500 rekordów - zakłamane.
Pyton_000, niby tak, ale to wyszukiwanie jest opcjonalne. W tabeli klienci mam jeszcze kilka pól po których wyszukuje. Np status, wiek itp. Poza tym mam jeszcze jedną tabele - clients_works - czyli miejsca w których pracują klienci. I np będę potrzebować stworzyć zapytanie typu:
Klienci w wieku 28-30, którzy mają status aktywny, mieszkają w Warszawie i są barmanami.
Jak to wtedy widzisz?
Pyton_000
8.05.2014, 07:20:41
Hmm...
Do tego co Turson podał dodaj Group BY user_id