Zend_DB_Select - Как написать этот оператор SQL

Доброе утро,

У меня есть некоторые проблемы с Zend Framework и Zend_DB_Select, я хочу использовать этот (рабочий) оператор SQL в качестве оператора выбора Zend DB:

select
  oslang
from
  oslang, os
where
  oslang.oslang_id = os.oslang_id and
  ossubversion_id = 1

Я пытался следовать, но это работает:

try {
        $select = $this->_db->select()
             ->from('OSLANG')
             ->from('OS')
             ->where("OSLANG.OSLANG_ID = OS.OSLANG_ID")
             ->where("OSSUBVERSION_ID = ?", $subVersionId);
        $results = $select->query()->fetchAll();
    } catch (Exception $e) {
        $this->_logException($e);
        $results = array();
    }

должно быть возможно, что с OSLANG_ID связано несколько ОС

У кого-нибудь есть хорошая идея, где моя ошибка?

2 ответа

Решение
        $select = $this->_db->select()
             ->from('OSLANG')
             ->join('OS',"OSLANG.OSLANG_ID = OS.OSLANG_ID")
             ->where("OSSUBVERSION_ID = ?", $subVersionId);
        $results = $select->query()->fetchAll();
SELECT * FROM x, y

равно

SELECT * FROM x CROSS JOIN y

Итак, попробуйте использовать метод joinCross(). Согласно его PHPDoc:

Параметры $name и $cols следуют той же логике, которая описана в методе from().

Это будет что-то вроде этого:

    $select = $this->_db->select()
         ->from('OSLANG')
         ->joinCross('OS')
         ->where("OSLANG.OSLANG_ID = OS.OSLANG_ID")
         ->where("OSSUBVERSION_ID = ?", $subVersionId);
    $results = $select->query()->fetchAll();

Обратите внимание, что если вы используете MySQL, CROSS JOIN равен INNER JOIN:

В MySQL CROSS JOIN является синтаксическим эквивалентом INNER JOIN (они могут заменять друг друга). В стандартном SQL они не эквивалентны. ( Справочное руководство по MySQL 5.1:: Синтаксис JOIN)

Разница лишь в том, что:

INNER JOIN используется с предложением ON, CROSS JOIN используется в противном случае

Так что в MySQL вы можете опустить использование ключевых слов INNER или CROSS, синтаксис:

… TableReference [INNER | CROSS] JOIN tableFactor [joinCondition] …

Другие вопросы по тегам