Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Inner join + left join zend framework
Forum PHP.pl > Forum > Bazy danych > MySQL
aggreSSive115
Witam, używam w moim projekcie zend_db_select, którego to potrzebuję jako adapter dla zend_paginatora. Wszystko było ok, do czasu pojawienia się trudniejszych zapytań. Ułożyłem sobie w phpmyadminie takie zapytanie:

  1. SELECT cc.id, cc.name, i.name, i.file_name, i.file_type
  2. FROM (
  3. SELECT c.first_id, c.first_type, c.second_id, c.second_type, r.id, r.name, r.city
  4. FROM polaczenia AS c
  5. INNER JOIN realizacje AS r ON c.first_id =223
  6. AND c.second_type = 'realizacje'
  7. AND c.second_id = r.id
  8. ORDER BY `c`.`second_id` ASC
  9. ) AS cc
  10. LEFT JOIN polaczenia AS ccc ON ccc.first_type = 'realizacje_zalaczniki'
  11. AND ccc.second_type = 'images'
  12. AND ccc.first_id = cc.second_id
  13. LEFT JOIN vert_images AS i ON ccc.second_id = i.id
  14. LIMIT 0 , 132


I mam spory problem z przerobieniem tego na prawidłowe zapytanie używając $select. PS - tutoriale oczywiście przejrzałem, nie znalazłem tam odpowiedzi.
Pilsener
Hej, podpowiem Ci kilka rozwiązań:

1. Możesz użyć prostego zapytania jako "szkieletu" a podzapytania wpisać "z palca", np:
  1. $select->where('id in (?)', new Zend_Db_Expr('select id from id_table where cos=123'));


2. Możesz całe zapytanie wpisać "z palca" (paginator chyba daje taką możliwość, jest tam kilka opcji, można poeksperymentować)

3. Możesz utworzyć kilka selectów w jednej metodzie:
  1. $select1 = $this->select();
  2. $select2 = $this->select();

I wstawić jednego w drugi.

Kombinuj wink.gif
5k7
napisze Ci jutro bo już spadam ; )

Więc tak jak obiecałem - wykreśle Ci strukture

$zapytanie = $this->select()
->setIntegrityCheck(false)
->from(array('t1'=>'tabela1'),array('kolumna1', 'kolumna2', 'id_z_tabeli1' => 'id', 'kolumna4'))
->join(array('t2'=>'tabela2'),'t1.kolumna=t2.kolumna', array('kolumna1', 'kolumna2'))
->join(array('t3'=>'tabela3'),'t2.kolumna=t3.kolumna',array('kolumna1', 'kolumna2', 'kolumna3'))
->where('t1.kolumna =?', $jakas_wartosc)
->where('t2.kolumna =?', $jakas_wartosc)
->order('t1.kolumna DESC)
->limit(0,100);

Oczywiście bez zagłębianie się w twój przypadek, jeżeli chcesz jakies inne złączenia to zamień sobie na leftJoin czy co tam chcesz.

Jak masz jakieś pytania to pisz ; )
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.