2010-09-21 27 views
1

我需要joinLeft Zend_Db的翼內:Zend的Db的joinLeft使用參數值

$select->joinLeft(array('ATAG' => 'ad_tags'), 
        array('ADM.id = ATAG.ad_id AND ADM.site_id = ATAG.site_id AND ATAG.tag_id = ?', $input_vars['tag']), 
        array('tag_id')) 
     ->order('ATAG.tag_id DESC') 
     ->limit('1'); 

然而,我不能使用的陣列作爲第二個參數,因爲它僅標記的字符串;我怎樣才能傳遞值,而不是真的把它嵌入到字符串中?

回答

1

根據您的例子中,你需要使用quoteInto(考慮到你在Zend_Db_Table類):

$select->joinLeft(array('ATAG' => 'ad_tags'), 
        'ADM.id = ATAG.ad_id AND ADM.site_id = ATAG.site_id AND ' . 
        $this->getAdapter()->quoteInto('ATAG.tag_id = ?',$input_vars['tag']), 
        array('tag_id')) 
     ->order('ATAG.tag_id DESC') 
     ->limit('1'); 

你也可以做同樣的:

$select->from(array('ADM' => 'adm_table'),'*') 
     ->joinLeft(array('ATAG' => 'ad_tags'), 'ADM.id = ATAG.ad_id', 'ATAG.tag_id') 
     ->where('ADM.site_id =ATAG.site_id') 
     ->where('ATAG.tag_id = ?',$input_vars['tag']) 
     ->limit(1); 

如果您在Zend_Db_Table中您需要設置

$select->setIntegrityCheck(false); 

(注意,adm_table只是一個例子,因爲你沒有告訴我表名)

+0

不幸的是,這不起作用,因爲我需要'ON'子句中的額外條件。 – 2010-09-22 14:14:08

+0

如果您在ON中指定或WHERE無關緊要,它將起作用,因爲在WHERE clausule中指定了條件。這只是可讀性。任何方式,我使用您的查詢編輯我的答案與解決方案。所以,請確保下調投票時=) – 2010-09-22 16:27:17

+0

實際上,您會發現它*確實關心是否刪除行在ON和WHERE中發生。由於你的原始答案並不能給我我需要的結果,你會收到一個倒退。現在你已經修改了你的答案,你會收到一個贊成票,並得到支票。 – 2010-09-29 23:19:46