[英]inner join with codeigniter duplicating results
我有以下代碼,我正在嘗試從大約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
線。
要Debug
,請在控制器的構造函數中啟用PROFILER 。
$this->output->enable_profiler(TRUE);
這將顯示你的下面的所有細節VIEW
,包括queries
executed.Use在phpMyAdmin和調試該查詢。
我不知道這個工具,但是這應該為訂單中的每個產品返回一個單獨的記錄。 (或者每個選項。那些看起來像多對多的連接表。我假設狀態ID是唯一的,所以可能不是它。)
我要做的調試是開始簡化查詢,然后我可以看到哪個部分導致重復。
檢查一下
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.