mysql - Zend DB join 选择所有列

标签 mysql zend-framework join frameworks

我正在尝试使用 Zend_Db_Select 执行查询。这是我的代码:

 $db = $this->db;
    $select = $this->db->select(false)
   ->from('invoice',$data1)
   ->join('partner_settings', $db->quoteInto('partner_settings.clientid = ?', $clientid), array()) //'toggle_value'))
   ->join('partner_info', $db->quoteInto('partner_info.rowid = partner_settings.partnerinfoid', array())) //'type', 'shipper_name' => 'partner_info.name')))
   ->join('partner_shipping', $db->quoteInto('partner_shipping.partnersettingsid = partner_settings.rowid', array())) //'default_method_id')))
   ->join('partner_ship_methods', $db->quoteInto('partner_ship_methods.rowid = partner_shipping.default_method_id'), array()) //'shipping_method' => 'name')) 
   ->where('storeid IN (?)',$inputid)
   ->where('partner_info.type = ?', 'shipping')
   ->where('partner_settings.toggle_value = ?', 'on')
   ->order(array('datetime_cre DESC'));

$data1 是一个包含以下值的数组:

Array
(
    [0] => invoice_date AS inv_invoice_date
    [1] => invoice_id AS inv_invoice_id
    [2] => name AS inv_name
    [3] => ups_track AS inv_ups_track
    [4] => shipping_pdf AS inv_shipping_pdf
    [5] => invoice_pdf AS inv_invoice_pdf
    [6] => alert AS inv_alert
    [7] => invoice_date AS inv_invoice_date
    [8] => invoice_id AS inv_invoice_id
    [9] => name AS inv_name
    [10] => subtotal AS inv_subtotal
    [11] => tax_inclusive AS inv_tax_inclusive
    [12] => total AS inv_total
    [13] => shipping_pdf AS inv_shipping_pdf
    [14] => invoice_pdf AS inv_invoice_pdf
    [15] => alert AS inv_alert
    [16] => rowid
    [17] => partner_info.name AS shipper_name
    [18] => partner_ship_methods.name AS shipping_method
)

生成的 MYSQL 查询如下所示:

SELECT `invoice`.`invoice_date` AS `inv_invoice_date`, `invoice`.`invoice_id` AS `inv_invoice_id`, `invoice`.`name` AS `inv_name`, `invoice`.`ups_track` AS `inv_ups_track`, `invoice`.`shipping_pdf` AS `inv_shipping_pdf`, `invoice`.`invoice_pdf` AS `inv_invoice_pdf`, `invoice`.`alert` AS `inv_alert`, `invoice`.`invoice_date` AS `inv_invoice_date`, `invoice`.`invoice_id` AS `inv_invoice_id`, `invoice`.`name` AS `inv_name`, `invoice`.`subtotal` AS `inv_subtotal`, `invoice`.`tax_inclusive` AS `inv_tax_inclusive`, `invoice`.`total` AS `inv_total`, `invoice`.`shipping_pdf` AS `inv_shipping_pdf`, `invoice`.`invoice_pdf` AS `inv_invoice_pdf`, `invoice`.`alert` AS `inv_alert`, `invoice`.`rowid`, `partner_info`.`name` AS `shipper_name`, `partner_ship_methods`.`name` AS `shipping_method`, `partner_info`.*, `partner_shipping`.* FROM `invoice`
     INNER JOIN `partner_settings` ON partner_settings.clientid = '33'
     INNER JOIN `partner_info` ON partner_info.rowid = partner_settings.partnerinfoid
     INNER JOIN `partner_shipping` ON partner_shipping.partnersettingsid = partner_settings.rowid
     INNER JOIN `partner_ship_methods` ON partner_ship_methods.rowid = partner_shipping.default_method_id WHERE (storeid IN ('43')) AND (partner_info.type = 'shipping') AND (partner_settings.toggle_value = 'on') ORDER BY `datetime_cre` DESC

我最大的问题是 SELECT columns 子句,其中包括:partner_info.*、partner_shipping.* 我不想包含这些表中的所有列。我已将 join() columns 参数设置为空 array(),但这没有帮助。

有人找到解决这个问题的方法了吗?我一直在徒劳地寻找。

最佳答案

您尚未将 columns 参数设置为空数组,而是将该数组作为第二个参数传递给 quoteInto()。你有:

->join('partner_info', $db->quoteInto('partner_info.rowid = partner_settings.partnerinfoid', array()))

quoteInto() 没有任何作用,因为您没有传入任何变量,所以您可能想要的是:

->join('partner_info', 'partner_info.rowid = partner_settings.partnerinfoid', array())

因此 join() 的第一个参数是表名称,第二个参数是条件,第三个参数是列。

关于mysql - Zend DB join 选择所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245636/

相关文章:

MYSQL Performance Tuning with group by 子句

MySQL “Sending data” 非常慢

Mysql插入2个表

php - 从 Codeigniter 中的数据库查询创建多维数组

javascript - Zend Framework - 包含 JS 不适用于新系统

mysql - 多个 JOIN 与多个 OR 非常慢

mysql - 加入表时为每个单个 ID 添加记录

zend-framework - 如何通过 Zend_Db_Select 从 PostgreSQL 接收 bytea 数据?

php - Zend Framework 表关系

mysql - 我怎样才能加入这两个查询?