我有以下代码,我正在尝试从大约4个不同的表中获取基于一个订单号的信息。我正在使用codeigniter,并使用以下代码获得相同记录的副本。当数据库中只有一个真正存在时,基本上会显示两行。
function get_orders($user_id)
{
$this->db->select('*');
$this->db->from('Orders');
$this->db->join('Order_Options', 'Orders.orderNumber = Order_Options.orderNumber');
$this->db->join('Order_Products', 'Orders.orderNumber = Order_Products.orderNumber');
$this->db->join('Order_Status', 'Orders.order_status = Order_Status.id');
$this->db->where(array('user_id' => $user_id));
$query = $this->db->get();
return $query->result();
}
我从codeigniters在线用户手册中获取了此代码。我自己添加的唯一一行是where
和return
行。
答案 0 :(得分:1)
在控制器的构造函数中Debug
启用 PROFILER 。
$this->output->enable_profiler(TRUE);
这将显示VIEW
下面的所有详细信息,包括执行的queries
。在phpmyadmin和debug中使用该查询。
答案 1 :(得分:0)
我不知道这个工具,但是这应该为订单中的每个产品返回一个单独的记录。 (或者每个选项。那些看起来像多对多的连接表。我假设状态ID是唯一的,所以可能不是它。)
我要做的调试是开始简化查询,然后我可以看到哪个部分导致重复。
答案 2 :(得分:0)
检查
function get_orders($user_id)
{
$query=$this->db->select('*');
->distinct()
->from('Orders');
->join('Order_Options', 'Orders.orderNumber = Order_Options.orderNumber');
->join('Order_Products', 'Orders.orderNumber = Order_Products.orderNumber');
->join('Order_Status', 'Orders.order_status = Order_Status.id');
->where(array('user_id' => $user_id));
->get();
return $query->result();
}