没有结果与PHP和SQL多次连接

时间:2013-06-21 08:31:39

标签: php mysql 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');
$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,有没有人知道为什么一旦我使用多个连接它会返回空结果?

4 个答案:

答案 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);