0

早上好,

我对 Zend Framework 和 Zend_DB_Select 有一些问题,我想使用这个(工作)SQL 语句作为 Zend DB Select 语句:

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 相关联

有人知道我的错误在哪里吗?

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 回答