当我尝试这段代码时:
$this->db->select('customers.customerid, customers.firstname');
$this->db->from('customers');
$this->db->join('orders', 'orders.customerid = customers.customerid');
$this->db->join('order_domains', 'order_domains.orderid = orders.orderid');
$this->db->join('order_hostings', 'order_hostings.orderid = orders.orderid');
$this->db->join('order_servers', 'order_servers.orderid = orders.orderid');
$this->db->group_by('orders.customerid');
$query = $this->db->get();
$domainusers = $query->result();
var_dump($domainusers);
我尝试过使用内部联接,但我尝试的所有内容都会返回一个空结果:
var_dump(); ---> array(0) { }
当我评论最后3个连接中的两个时:
//$this->db->join('order_hostings', 'order_hostings.orderid = orders.orderid');
//$this->db->join('order_servers', 'order_servers.orderid = orders.orderid');
它将返回结果:
var_dump(); ---> array(1) { [0]=> object(stdClass)#17 (1) { ["customerid"]=> string(1) "1" } }
我在这个项目中使用codeigniter,有没有人知道为什么一旦我使用多个连接它会返回空结果?
答案 0 :(得分:0)
您可以运行$this->db->last_query();
来查看运行的实际查询。在MySQL客户端中运行它并通过查询来弄清楚发生了什么,这通常很方便。
你也经常在MySQL中使用EXPLAIN来获得一些线索:
EXPLAIN SELECT customers.customerid, customers.firstname
FROM customers
LEFT JOIN...
等...
答案 1 :(得分:0)
更改
$this->db->select('customers.customerid, customers.firstname');
要
$this->db->select('customers.*, orders.*, order_domains.*, order_hostings.*, order_servers.*');
如果之后您获得了一些结果,请在select语句中仅保留EACH联接表中所需的字段。
答案 2 :(得分:0)
尝试将这两个更改为LEFT OUTER JOIN。这样,如果这些表上没有匹配的记录,它将不会阻止返回的行(在这种情况下,这些表中的字段将被设置为NULL)。
对codeigniter不太确定,但认为它是这样做的: -
$this->db->select('customers.customerid, customers.firstname');
$this->db->from('customers');
$this->db->join('orders', 'orders.customerid = customers.customerid');
$this->db->join('order_domains', 'order_domains.orderid = orders.orderid');
$this->db->join('order_hostings', 'order_hostings.orderid = orders.orderid', 'left');
$this->db->join('order_servers', 'order_servers.orderid = orders.orderid', 'left');
$this->db->group_by('orders.customerid');
答案 3 :(得分:0)
您可以在多个块中使用以下内容:
$this->db->distinct('orders.customerid');
$this->db->from('orders');
$this->db->join('order_domains', 'orders.orderid = order_domains.orderid', 'inner');
$this->db->join('customers', 'customers.customerid = orders.customerid');
$this->db->group_by('orders.customerid');
$query = $this->db->get();
$domainusers = $query->result();
var_dump($domainusers);