Zend DB Select一个简单的Mysql Left Join版本

时间:2011-09-27 04:35:04

标签: zend-framework zend-db-select

我在mysql上有一个简单的Left查询

SELECT sp. * , p.name, p.date_created
FROM subpages sp
LEFT JOIN pages p ON p.id = sp.page_id

我不知道如何从zend框架中执行此查询。

我有一个Mapper页面,它访问一个扩展Zend_Db_Table_Abstract的DbTable页面。我读了一些文章,所以我想声明应该从mapper看起来像这样

$select = $this -> DbTable() -> select();
$select -> joinleft(..... This is what I dont know how to write....);
$results = $this -> DbTable() -> fetchAll($select);
if($results) { return $result; }

在文章中,$select -> from()被使用了,在我的思绪陷入困境的情况下,为什么我们需要在已经在DbTable页面中定义它时编写$select -> from("subpages")

如何正确编写连接语句?

2 个答案:

答案 0 :(得分:1)

根据您发布的查询,您可以使用以下

 (You have not mentioned table name for ailas 'mi' so I have taken it as 'your_table_name' )

$select = $this -> DbTable() -> select()->from(array("your_table_name" => 'mi');
$select -> joinleft(array("pages" => 'p'),"p.id = mi.page_id");
$results = $this -> DbTable() -> fetchAll($select);
if($results) { return $result; }

Hope it will work for you mrN.

答案 1 :(得分:1)

如果要将select与多个表一起使用,则需要从表适配器中获取它,这是一个Zend_Db对象(您需要指定表)在from()方法中。

所以,您需要以下内容:

$select = $this->DbTable()->getAdapter()->select();
$select->from(array("mi" => "tableName"));
$select->joinLeft(array("p" => "pages"), "p.id = mi.page_id");
(etc)

希望有所帮助,