Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Zapytanie z join - "cannot join with another table"
Forum PHP.pl > Forum > PHP > Frameworki
IceManSpy
Witam

Mam pewien problem.
Mam takie zapytanie:
  1. $query = $this->select()
  2. ->from(array('s' => 'student'))
  3. ->join(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array());

W wyniku otrzymuje:
  1. SELECT `s`.* FROM `student` AS `s` INNER JOIN `group` AS `g` ON s.gro_id = g.gro_pk_id

Wszystko fajnie, ale ja chce mieć jeszcze `g`.* .
Gdzie dopisać do tego zapytania, aby zrobiło jeszcze `g`.* ?
Próbowałem tak (dla testu, aby cokolwiek pobrał):
  1. $query = $this->select()
  2. ->from(array('s' => 'student'),
  3. array('stu_name', 'stu_surname'))
  4. ->join(array('g' => 'gro_year'),
  5. 's.gro_id = g.gro_pk_id');

Ale dostaję błąd:
Message: Select query cannot join with another table
melkorm
  1. ->join(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array());


Spójrz za co odpowiada trzeci parametr przy JOIN'ach, a wszystk ostanei się jasne dlaczego pobiera Tobie tylko s.*
IceManSpy
Próbowałem tak - ten sam błąd:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id');
Próbowałem tak - ten sam błąd:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array('g' => 'group'));
Próbowałem tak - ten sam błąd:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array('gro_year'));
Próbowałem tak - ten sam błąd:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array('g' => 'group'),
  2. array('g.gro_year', 'g.gro_name'));
Próbowałem tak - ten sam błąd:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id',array('g.gro_year'));

Pomysły mi się skończyły sad.gif
zend
Teoretycznie wszystko powinno Ci działać tak jak chcesz, ale skoro nie działa to spróbuj zahardcodować kolumny
  1. $select
  2. -> reset(Zend_Db_Select::COLUMNS)
  3. -> columns(new Zend_Db_Expr('s.*, g.*'));


Cytat
Select query cannot join with another table

  1. $select -> setIntegrityCheck(false);
IceManSpy
Próbowałem z
  1. $select -> setIntegrityCheck(false);
Ale dalej otrzymuje:
  1. SELECT `s`.* FROM `student` AS `s` INNER JOIN `group` AS `g` ON s.gro_id = g.gro_pk_id

Dopiero to pomaga:
  1. $select
  2. -> reset(Zend_Db_Select::COLUMNS)
  3. -> columns(new Zend_Db_Expr('s.*, g.*'));
Ale może jednak jest jakieś inne wyjście?
melkorm
a próbowałeś:
  1. $query = $this->select()
  2. ->from(array('s' => 'student'))
  3. ->join(array('g' => 'group'),'s.gro_id = g.gro_pk_id');
IceManSpy
Jak do tego co napisałem dodam:
  1. ->setIntegrityCheck( false )

To wtedy jest s.* i g.* .
Nawet jak dodam nowe join'y to śmiga jak należy.
Wcześniej pisałem:
  1. ->joinLeft(array('g' => 'group'),'s.gro_id = g.gro_pk_id'); // sprawdziłem na tym co wyżej napisałeś, join czy joinLeft zwraca to samo

ale przez to setIntegrityCheck nie działało.

Ważne, że już działa bez tych kolumn, wielkie dzięki smile.gif
melkorm
  1. ->setIntegrityCheck( false )


Polecam to sobie odgórnie zrobić dla select'a - oszczędzi Tobie wielu problemów smile.gif
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.