how to build nested select on zend db(如何在 zend db 上构建嵌套选择)
                            本文介绍了如何在 zend db 上构建嵌套选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
这个查询有问题
SELECT * FROM(
    SELECT `b`.*,`owner`.firstname,`owner`.lastname,`owner`.email,
    (
        SELECT COUNT(`ps`.profile_id)   FROM `profile` AS `ps`
        LEFT JOIN `xref_store_profile_brand` AS `xbp` ON `xbp`.profile_id = `ps`.profile_id
        WHERE `xbp`.brand_id = b.brand_id AND ps.role = 'salesrep' AND `xbp`.store_id IS NULL
    ) AS `salesrepTotal`,
    (
        SELECT GROUP_CONCAT(`ms`.firstname)   FROM `profile` AS `ps`
        LEFT JOIN `xref_store_profile_brand` AS `xbp` ON `xbp`.profile_id = `ps`.profile_id
        LEFT JOIN `member` AS `ms`ON `ms`.member_id = `ps`.member_id
        WHERE `xbp`.brand_id = `b`.brand_id AND ps.role = 'salesrep' AND `xbp`.store_id IS NULL
    ) AS `salesrep`,
    (
        SELECT COUNT(`s`.store_id) FROM `store` AS `s`
        LEFT JOIN `xref_store_profile_brand` AS `xbs` ON `xbs`.store_id = `s`.store_id
        WHERE `xbs`.brand_id = `b`.brand_id AND `xbs`.brand_id IS NOT NULL
    ) AS `storeTotal`,
    (
        SELECT GROUP_CONCAT(`s`.name) FROM `store` AS `s`
        LEFT JOIN `xref_store_profile_brand` AS `xbs` ON `xbs`.store_id = `s`.store_id
        WHERE `xbs`.brand_id = `b`.brand_id AND `xbs`.brand_id IS NOT NULL
    ) AS `store`
    FROM `brand` AS `b`
    LEFT JOIN
    (
        SELECT `m`.firstname,`m`.lastname,`m`.email,`xspb`.brand_id FROM `member` AS `m`
        LEFT JOIN `profile` as `p` ON `p`.member_id = `m`.member_id AND `p`.role = 'designer' AND `p`.isPrimary = 1
        LEFT JOIN `xref_store_profile_brand` AS `xspb` ON `xspb`.profile_id = `p`.profile_id AND `xspb`.store_id IS NULL
    ) AS `owner` ON `owner`.brand_id =`b`.brand_id
    GROUP BY `b`.brand_id
) AS `final`
如何将其转换为 Zend_Db_Select 对象?
how can i convert this in to Zend_Db_Select object?
主要问题是这部分
SELECT `b`.*,`owner`.firstname,`owner`.lastname,`owner`.email,
    (
        SELECT COUNT(`ps`.profile_id)   FROM `profile` AS `ps`
        LEFT JOIN `xref_store_profile_brand` AS `xbp` ON `xbp`.profile_id = `ps`.profile_id
        WHERE `xbp`.brand_id = b.brand_id AND ps.role = 'salesrep' AND `xbp`.store_id IS NULL
    ) AS `salesrepTotal`,
推荐答案
您需要使用 Zend_Db_Expr 对象在您的查询和 选择 AS 的数组结构.
You need to use Zend_Db_Expr objects in your query and array structures for select AS.
以下是您正在寻找的解决方案:
below is the solution you are looking for:
<?php
$db = Zend_Db_Table::getDefaultAdapter();
//  inner query
$sqlSalesRepTotal = $db->select()
        ->from(array('ps' => 'profile'))
        ->joinLeft(array('xbp' => 'xref_store_profile_brand'), 'xbp.profile_id = ps.profile_id')
        ->where('xbp.brand_id = b.brand_id')
        ->where('ps.role = ?', 'salesrep')
        ->where('xbp.store_id IS NULL');
//  main query
$sql = $db->select()
        ->from(array('b' => 'brand'), array(
            //  NOTE: have to add parentesis around the expression
            'salesrepTotal' => new Zend_Db_Expr("($sqlSalesRepTotal)")
        ))
        ->where('....')
        ->group('brand_id');
//  debug
var_dump($db->fetchAll($sql));
                        这篇关于如何在 zend db 上构建嵌套选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:如何在 zend db 上构建嵌套选择
				
        
 
            
        基础教程推荐
             猜你喜欢
        
	     - MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
 - while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
 - 从字符串 TSQL 中获取数字 2021-01-01
 - CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
 - 带更新的 sqlite CTE 2022-01-01
 - 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
 - 带有WHERE子句的LAG()函数 2022-01-01
 - 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
 - MySQL 5.7参照时间戳生成日期列 2022-01-01
 - ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
						
						
						
						
						
				
				
				
				