Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Propel] Tabela i dwa razy join
mike
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Mam taką sytuację: tabela Client zawierająca pole company_id, jest to klucz obcy z tabeli Company, która to z kolei zawiera pole address_id będące kluczem do tabeli Address.
Wygląda to mniej więcej tak:
  1. CREATE TABLE client
  2. (
  3. id serial NOT NULL,
  4. "login" character varying(50) NOT NULL,
  5. "password" character(40) NOT NULL,
  6. first_name character varying(50),
  7. last_name character varying(50),
  8. max_receivers integer NOT NULL,
  9. max_cargos integer NOT NULL,
  10. invoices_avaliable integer NOT NULL,
  11. balance integer,
  12. client_type_id integer,
  13. company_id integer,
  14. CONSTRAINT client_pkey PRIMARY KEY (id),
  15. CONSTRAINT client_client_type_id_fkey FOREIGN KEY (client_type_id)
  16. REFERENCES client_type (id) MATCH SIMPLE
  17. ON UPDATE NO ACTION ON DELETE NO ACTION,
  18. CONSTRAINT client_company_id_fkey FOREIGN KEY (company_id)
  19. REFERENCES company (id) MATCH SIMPLE
  20. ON UPDATE NO ACTION ON DELETE NO ACTION,
  21. CONSTRAINT client_login_key UNIQUE ("login")
  22. )
  1. CREATE TABLE company
  2. (
  3. id serial NOT NULL,
  4. name character varying(100) NOT NULL,
  5. nip character varying(13) NOT NULL,
  6. phone character varying(50),
  7. regon character varying(15),
  8. address_id integer,
  9. CONSTRAINT company_pkey PRIMARY KEY (id),
  10. CONSTRAINT company_address_id_fkey FOREIGN KEY (address_id)
  11. REFERENCES address (id) MATCH SIMPLE
  12. ON UPDATE NO ACTION ON DELETE NO ACTION
  13. )
  1. CREATE TABLE address
  2. (
  3. id serial NOT NULL,
  4. "local" character varying(10) NOT NULL,
  5. building character varying(10) NOT NULL,
  6. street character varying(100) NOT NULL,
  7. city character varying(50) NOT NULL,
  8. post_code character varying(6) NOT NULL,
  9. country character varying(50) NOT NULL,
  10. CONSTRAINT address_pkey PRIMARY KEY (id)
  11. )

Chciałbym teraz za pomocą Propela wydobyć w jednym wyniku (w jednym zapytaniu) dane o kliencie, firmie i adresie.
Na chwilę obecną mam:
  1. <?php
  2.  
  3. $criteria = new Criteria();
  4. $criteria->add(ClientPeer::ID, $clientId);
  5. $users = ClientPeer::doSelectJoinAllExceptClientType($criteria);
  6.  
  7. ?>
daje mi to:
  1. SELECT client.ID, client.LOGIN, client.PASSWORD, client.FIRST_NAME, client.LAST_NAME, client.MAX_RECEIVERS, client.MAX_CARGOS, client.INVOICES_AVALIABLE, client.BALANCE, client.CLIENT_TYPE_ID, client.COMPANY_ID, company.ID, company.NAME, company.NIP, company.PHONE, company.REGON, company.ADDRESS_ID FROM client, company WHERE client.ID=11 AND client.COMPANY_ID=company.ID
czyli nie to czego oczekuję.
Próbowałem już chyba wszystkie kombinacje zarówno z Criteria::add() jak i z Criteria::addJoin()

Jeżeli ktoś wie jak to zrobić będę wdzięczny za informację.

Dla ścisłości chciałbym mieć to:
  1. SELECT * FROM client JOIN company ON client.company_id = company.id
  2. JOIN address ON company.address_id = address.id
  3. WHERE client.id = 11


Ten post edytował mike_mech 18.03.2007, 20:31:57
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 19.08.2025 - 14:38