2016-02-29 66 views
1

我有這方面的工作CI模式功能get_info查詢模型停止在更改後的工作

function get_info($item_id) 
{ 

    $this->db->from('items'); 
    $this->db->where('item_id', $item_id); 


    $query = $this->db->get(); 

    if($query->num_rows()==1) 
    { 
     return $query->row(); 
    } 
    else 
    { 

     $item_obj=new stdClass(); 
     $fields = $this->db->list_fields('items_tier_prices'); 

     foreach ($fields as $field) 
     { 
      $item_obj->$field=''; 
     } 

     return $item_obj; 
    } 
} 

我需要修改上面的函數get_info這個自定義查詢:

function get_info($item_id) 
{ 
$sql_query = $this->db->query("select * from (select items.name as name, items.category as category, items.supplier_id as supplier_id, items.item_number as item_number, items.product_id as product_id, items.description as description, items.size as size, items.tax_included as tax_included, items.cost_price as cost_price, items_tier_prices.unit_price as unit_price, items.promo_price as promo_price, items.start_date as start_date, items.end_date as end_date, items.reorder_level as reorder_level, items.item_id as item_id, items.allow_alt_description as allow_alt_description, items.is_serialized as is_serialized, items.image_id as image_id, items.override_default_tax as override_default_tax, items.is_service as is_service, items.deleted as deleted 

    from items 
LEFT JOIN items_tier_prices 
ON items.item_id=items_tier_prices.item_id 
LEFT JOIN price_tiers 
ON price_tiers.id=items_tier_prices.tier_id 
where 
price_tiers.name='jendela kaca mati single' 
and items.deleted=0 

union 
select items.* 
from items 
left join items_tier_prices 
ON items.item_id=items_tier_prices.item_id 
where items_tier_prices.item_id is null 
and items.deleted=0 
) x 
where x.item_id=".$item_id); 


$query = $this->db->query($sql_query); 

if($query->num_rows()==1) 
{ 
    return $query->row(); 
} 
else 
{ 
    $item_obj=new stdClass(); 

    $fields = $this->db->list_fields('items'); 
    $fields = $this->db->list_fields('price_tiers'); 
    $fields = $this->db->list_fields('items_tier_prices'); 

    foreach ($fields as $field) 
    { 
     $item_obj->$field=''; 
    } 

    return $item_obj; 
} 

} 

的問題是後修改查詢和list_field函數get_info不再工作。

我確定查詢在phpmyadmin中有效,並且函數中產生的查詢結果是同一個。它產生相同的列名和只有一行結果。

,但我不知道有:

$fields = $this->db->list_fields('items'); 
    $fields = $this->db->list_fields('price_tiers'); 
    $fields = $this->db->list_fields('items_tier_prices'); 

這有什麼錯我的修改,停止功能get_info工作?

+0

對於UNION,兩個查詢都必須返回相同數量的列,並且查詢1中的列必須與query2中的列具有相同的數據類型 – RiggsFolly

+0

我確定它們具有相同的數據。你可以檢查部分$ fields = $ this-> db-> list_fields('items'); $ fields = $ this-> db-> list_fields('price_tiers'); $ fields = $ this-> db-> list_fields('items_tier_prices');在這張桌子上放3張桌子是否正確?但我想我加入他們所有,所以我必須list_field所有表 – Devisy

+0

你也覆蓋你的變量。試試這個: '$ fields = []; $ fields [] = $ this-> db-> list_fields('items'); ''' – Ibu

回答

0

您打電話$this->db->query兩次。

改變你的代碼,你寫你的查詢是這樣的:

$sql_query = "select * from (select items.name as name 
      ..etc.."; 

然後執行查詢,如在你的腳本:

$query = $this->db->query($sql_query); 

如果您的查詢是正確的,你就會得到一個返回行。請記住在查詢最終返回0行或多於1行時處理異常。

您還可以檢查您的瀏覽器控制檯。如果查詢語法中存在錯誤,您會發現500 Internal Server Error,它允許您檢查可能導致錯誤的原因。