【问题标题】:Zend DB Select version of a simple Mysql Left JoinZend DB Select 版本的简单 Mysql Left Join
【发布时间】:2011-09-27 04:35:03
【问题描述】:

我在 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语句?

【问题讨论】:

    标签: zend-framework zend-db-select


    【解决方案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)
    

    希望对你有帮助,

    【讨论】:

    • 好的,我可以用它来做我的事。谢谢
    【解决方案2】:

    从您发布的查询中,您可以使用以下内容

     (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.
    

    【讨论】:

    • mi 是个错误,它是 sp。如何定义单个字段 p.name 和 p.date_created
    • 出现错误Zend_Db_Table_Select_Exception: Select query cannot join with another table
    猜你喜欢
    • 2015-02-22
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多