0

おはよう、

Zend FrameworkとZend_DB_Selectに問題があります。この(動作中の)SQLステートメントをZendDBSelectステートメントとして使用したいと思います。

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();
    }

複数のOSがOSLANG_IDに関連付けられている可能性があります

誰かが私のエラーがどこにあるか良い考えを持っていますか?

4

2 に答える 2

2
        $select = $this->_db->select()
             ->from('OSLANG')
             ->join('OS',"OSLANG.OSLANG_ID = OS.OSLANG_ID")
             ->where("OSSUBVERSION_ID = ?", $subVersionId);
        $results = $select->query()->fetchAll();
于 2009-07-08T06:48:12.653 に答える
0
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 キーワードを使用して省略できます。構文は次のとおりです。

… テーブル参照 [内部 | CROSS] JOIN tableFactor [joinCondition] …</p>

于 2009-07-09T08:39:05.397 に答える