【发布时间】:2016-06-12 16:28:37
【问题描述】:
我有这个有效的 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 中有效,并且在函数中产生的查询结果是相同的。它产生相同的列名和只有 1 行的结果。
但我不确定:
$fields = $this->db->list_fields('items');
$fields = $this->db->list_fields('price_tiers');
$fields = $this->db->list_fields('items_tier_prices');
我为了阻止函数get_info 工作而进行的修改有什么问题?
【问题讨论】:
-
使用 UNION,两个查询必须返回相同数量的列,并且查询 1 中的列必须与查询 2 中的列具有相同的数据类型
-
我确信他们拥有相同的数据。你能检查一下 $fields = $this->db->list_fields('items'); 的部分吗? $fields = $this->db->list_fields('price_tiers'); $fields = $this->db->list_fields('items_tier_prices');在上面放3张桌子对吗?但我想我加入了他们,所以我必须列出所有表的列表字段
-
你也覆盖了你的变量。试试这个:
$fields = []; $fields[] = $this->db->list_fields('items'); ...
标签: php mysql arrays codeigniter