2013-04-26 61 views
0

我正在嘗試使用Zend_Db_Select執行查詢。這裏是我的代碼:Zend DB連接選擇所有列

$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')); 

$數據1是包含這些值的數組:

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列條款,其中包括:partner_info。*,partner_shipping。*我不想包括這些表中的所有列。我已經將join()列參數設置爲空數組(),但它沒有幫助。

有沒有人找到解決這個問題的辦法?我一直在無情地尋找。

回答

1

您尚未將列參數設置爲空數組,您將數組作爲第二個參數傳遞給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()第一個參數是表名,第二個是條件,第三個是列。

+0

這兩個都是對的。我討厭編程這樣的語法錯誤。謝謝你幫我找到那個錯誤。 – 2013-04-26 22:14:23