2

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

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

我不知道如何从 zend 框架执行这个查询。

我有一个映射器页面,它访问一个扩展 Zend_Db_Table_Abstract 的 DbTable 页面。我读了一些文章,所以我想映射器的语句应该看起来像这样

$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()被使用,我的想法卡在哪里,为什么我们需要写$select -> from("subpages")什么时候它已经在DbTable页面中定义了。

如何正确编写join语句?

4

2 回答 2

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.
于 2011-09-27T05:44:41.990 回答
1

如果要对多个表使用 select,则需要从table adapter获取它,它是一个Zend_Db对象(并且您需要在from()方法中指定您的表)。

因此,您需要以下内容:

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

希望有帮助,

于 2011-09-27T07:57:03.237 回答