2010-09-21 53 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