dougan4663 2013-05-02 10:01 采纳率: 0%
浏览 114

如何将ZF - > joinLeft()转换为子查询?

How would i convert below query to sub query? I don't want to use JOINS I want to do same through sub query. i-e I need three subqueries out of the three joins. How it would be possible for below query ?

protected $_name = 'sale_package_features';
public function getAllSalePackageFeatures(){
    $sql = $this->select()->setIntegrityCheck(false)
            ->from(array('spf' => $this->_name))
            ->joinLeft(array('sd' => 'sale_devices'),'sd.sale_device_id = spf.sale_device_id',array('sd.sale_device_name AS deviceName'))
            ->joinLeft(array('sp' => 'sale_packages'),'sp.sale_package_id = spf.sale_package_id',array('sp.sale_package_name AS packageName'))
            ->joinLeft(array('sf' => 'sale_features'),'sf.sale_feature_id = spf.sale_feature_id',array('sf.sale_feature_name AS featureName'))
            ->where('sf.parent_id != ?',0)
            ->order('spf.sale_package_feature_id ASC');
    return $sql->query()->fetchAll();
}

Edited :

SELECT
   `spf`.*, `sd`.`sale_device_name` AS `deviceName`, 
   `sp`.`sale_package_name` AS `packageName`, 
   `sf`.`sale_feature_name` AS `featureName` 
FROM `sale_package_features` AS `spf` 
LEFT JOIN `sale_devices` AS `sd` 
  ON sd.sale_device_id = spf.sale_device_id
LEFT JOIN `sale_packages` AS `sp` 
  ON sp.sale_package_id = spf.sale_package_id 
LEFT JOIN `sale_features` AS `sf` 
  ON sf.sale_feature_id = spf.sale_feature_id 
WHERE (sf.parent_id != 0) 
ORDER BY `spf`.`sale_package_feature_id` ASC
  • 写回答

1条回答 默认 最新

  • dsgk0386 2013-07-30 16:05
    关注

    You can use

    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $subSelect = $dbAdapter
        ->select()
        ->from( 'tablename',
            array(
                'col1_alias' => 'column1_name',
                'col2_alias' => 'column2_name',
            ))
        ->where('somefield = ?', $value_to_be_quoted);
    
    $select = $dbAdapter
        ->select()
        ->from(array('sub_alias' => $subSelect ))
        ->where('otherfield = ?', $other_value_to_be_quoted);
    
    $sql = $select->assemble();
    

    $sql will contain

    SELECT 
        sub_alias . *
    FROM
        (SELECT 
            tablename.column1_name AS col1_alias,
                tablename.column2_name AS col2_alias
        FROM
            tablename
        WHERE
            (somefield = 'quoted_value')) AS sub_alias
    WHERE
        (otherfield = 'quoted_other_value')
    

    If you need to use SELECT .. WHERE x IN (subselect) than go with

    $select->where( 'column IN (?)', new Zend_Db_Expr($subselect->assemble()) );
    
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作