簡體   English   中英

Codeigniter查詢生成多行

[英]Codeigniter query generating multiple rows

Codeigniter:

public function get_customers(){
    $this->db->select('*,customer.ID as ID,customer.Create_date as Create_date,transport.Name as Transporter, state.Name as State, city.Name as City, area.Name as Area, shipping_state.Name as Shipping_state, shipping_city.Name as Shipping_city, shipping_area.Name as Shipping_area');
    $this->db->from('customer');
    $this->db->join('transport','transport.ID = customer.Transporter','LEFT');
    $this->db->join('state','state.ID = customer.State','LEFT');
    $this->db->join('state as shipping_state','state.ID = customer.Shipping_state','LEFT');
    $this->db->join('city','city.ID = customer.City','LEFT');
    $this->db->join('city as shipping_city','city.ID = customer.Shipping_city','LEFT');
    $this->db->join('area','area.ID = customer.Area','LEFT');
    $this->db->join('area as shipping_area','area.ID = customer.Shipping_area','LEFT');
    return $this->db->get()->result_array();
}

在客戶表中,有2列連接到同一表。 在客戶表中,只有1行。 但是在生成查詢時會生成1000多個行。 任何人都可以幫助我,為什么它會生成1000多個行以及如何解決它。

您始終可以使用$this->db->last_query()直觀地了解和調試您的代碼。 這樣做很好,因為這樣您就可以開始了解Active Record的工作原理。

$results = $this->db->get()->result_array();
log_message( "debug", "get_customers sql: ". $this->db->last_query() );
return $results;

因此,當您以原始格式查看查詢時; 它看起來像這樣:

SELECT 
    *,customer.ID as ID,
    customer.Create_date as Create_date,
    transport.Name as Transporter, 
    state.Name as State, 
    city.Name as City, 
    area.Name as Area, 
    shipping_state.Name as Shipping_state, 
    shipping_city.Name as Shipping_city, 
    shipping_area.Name as Shipping_area
FROM
    customer
LEFT JOIN transport ON ( 
    transport.ID = customer.Transporter
)
LEFT JOIN state ON ( 
    state.ID = customer.State
)
LEFT JOIN state as shipping_state ON ( 
    state.ID = customer.Shipping_state
)
LEFT JOIN city as shipping_state ON ( 
    city.ID = customer.City
)
LEFT JOIN city as shipping_city ON ( 
    city.ID = customer.Shipping_city
)
LEFT JOIN area ON ( 
    area.ID = customer.Area
)
LEFT JOIN area as shipping_area ON ( 
    area.ID = customer.Shipping_area
)

這里有很多左聯接。 它將在每個左聯接上重復任何匹配的行。 在不知道數據的情況下很難說,但是您似乎更喜歡使用硬連接。

隨着連接數量的增加,您可能必須添加一個組

所以在您添加之前:

$this->db->group_by('customer.ID');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM