php - 如何使用 dbSelect 将此 Mysql 查询实现到 Zend 框架 1

标签 php mysql zend-framework

SELECT 
            CONCAT(us.user_id,' ', us.name),
            UPPER(sc.so_number) Order_no ,
            sh.upc UPC,re.label Error,
            (SELECT count(*) FROM order_checker_scan scan WHERE scan.so_number =sh.so_number and scan.upc=sh.upc and scan.user_id!=0
        and DATE_FORMAT(scan_time,'%Y-%m-%d') >= '2015-11-01' ) AS
        prev_data, 
            (select CONCAT(u.user_id,' ', u.name) from users u,picklist_history p where u.user_id=p.user_id and
        p.so_number=sh.so_number limit 1) as picker,
            sh.item_key Times,
            DATE_FORMAT(sc.date_started,'%b%d %Y %h:%i%p') datetime,sh.qty_required QTY 
            FROM 
            order_checker_short sh,
            order_checker_header 
            sc,order_checker_short_reason re,
            users us 
            WHERE sh.so_number=sc.so_number AND 
            sh.reason_id=re.reason_id AND 
            sc.created_by=us.user_id And 
            sc.created_by!=0 AND 
            DATE_FORMAT(date_started,'%Y-%m-%d') between '2015-11-16' and '2015-11-17' AND 
            sh.reason_id !=0 AND 
            sh.upc !=1 
            GROUP BY sc.so_number,sh.upc 
            ORDER BY sc.date_started DESC, sc.so_number DESC , sh.upc ASC

最佳答案

请测试以下内容:

// 1st subselect
$prevDataSelect = $db->select()
    ->from(array('scan' => 'order_checker_scan'), array('count(*)'))
    ->where('scan.so_number = sh.so_number')
    ->where('scan.upc = sh.upc')
    ->where('scan.user_id != 0')
    ->where("DATE_FORMAT(scan_time,'%Y-%m-%d') >= '2015-11-01'");

// 2nd subselect
$pickerSelect = $db->select()
    ->from(array('u' => 'users', 'p' => 'picklist_history'), array("CONCAT(u.user_id,' ', u.name)"))
    ->where('u.user_id = p.user_id')
    ->where('p.so_number = sh.so_number')
    ->limit(1);

// Main selection
$mainSelect = $db->select()
    ->from(
        // tables
        array(
            'sh' => 'order_checker_short',
            'sc' => 'order_checker_header',
            're' => 'order_checker_short_reason',
            'us' => 'users',
        ),
        // columns
        array(
            'SomeName'  => "CONCAT(us.user_id, ' ', us.name)",
            'Order_no'  => 'UPPER(sc.so_number)',
            'UPC'       => 'sh.upc',
            'Error'     => 're.label',
            'prev_data' => new Zend_Db_Expr('(' . $prevDataSelect . ')'),
            'picker'    => new Zend_Db_Expr('(' . $pickerSelect . ')'),
            'Times'     => 'sh.item_key',
            'datetime'  => "DATE_FORMAT(sc.date_started,'%b%d %Y %h:%i%p')",
            'QTY'       => 'sh.qty_required',
        )
    )
    // AND WHERE clauses
    ->where('sh.so_number = sc.so_number')
    ->where('sh.reason_id = re.reason_id')
    ->where('sc.created_by = us.user_id')
    ->where('sc.created_by != 0')
    ->where("DATE_FORMAT(date_started, '%Y-%m-%d') between '2015-11-16' and '2015-11-17'")
    ->where('sh.reason_id != 0')
    ->where('sh.upc != 1')
    // GROUP BY clause
    ->group(array('sc.so_number', 'sh.upc'))
    ->order(array('sc.date_started DESC', 'sc.so_number DESC', 'sh.upc ASC'));

如果不起作用,请告诉我 $mainSelect->assemble() 的输出是什么

关于php - 如何使用 dbSelect 将此 Mysql 查询实现到 Zend 框架 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769975/

相关文章:

zend-framework - Zend_Date::toString() 输出错误的年份。我的代码或 Zend_Date 中的错误?

php - whmcs 显示每个组的活跃产品

php - 如何在代码点火器模型中跨多个函数实现数据库锁定?

php - 转义 MySQL 语句的字符串

mysql - 在 Mysql Workbench 中,Synchronize Model with Database 在哪里

php - 从命令行运行 Zend_Application?

php - 如何使用php从mysql数据库中生成多个表的xml文件?

php - 从Mysql获取每组最小值的总和

mysql - 选择过去的时间和过去的日期 MySQL - 使用 if

php - 如何从 Zend Framework 2 中的 Controller 修改表单验证器?