2013-06-21 45 views
2

加入当我尝试此代码:多没有结果与PHP和SQL

$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,有没有人有任何想法为什么它会返回空结果,一旦我使用多个连接?

+1

逻辑上正在发生的事情,因为没有匹配记录在order_hostings或order_servers中的一个或两个上。 – Kickstart

+0

除了Kickstart评论的内容之外,没有理由这样做。我个人用4个以上的连接完成了很多次,并且只有当数据不正确存在时才遇到问题。 – mic

回答

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); 
0

您可以运行$this->db->last_query();查看运行的实际查询。在MySQL客户端中运行它通常很方便,并且可以查看查询来了解发生了什么。

你也可以经常在MySQL中使用EXPLAIN得到一些线索:

EXPLAIN SELECT customers.customerid, customers.firstname 
FROM customers 
LEFT JOIN... 

等等

+0

SELECT'customers'.'customerid' FROM('customers') INNER JOIN'orders' ON'orders'.'customerid' ='customers'.'customerid' INNER JOIN'order_hostings' ON'order_hostings'.' orderid' ='orders'.'orderid' GROUP BY'orders'.'customerid' ---------这就是查询看起来像 – Edelweiss

+0

你得到什么输出: 'EXPLAIN SELECT customers .customerid FROM(customers)INNER JOIN orders on orders.customerid = customers.customerid INNER JOIN order_hostings ON order_hostings.orderid = orders.orderid GROUP BY orders.customerid' – BT643

+0

我做了一个图片,因为在PHP中它不是很可读----> http://snag.gy/w3GgO.jpg – Edelweiss

0

变化

$this->db->select('customers.customerid, customers.firstname'); 

$this->db->select('customers.*, orders.*, order_domains.*, order_hostings.*, order_servers.*'); 

如果后你会得到一些结果,k在select语句中只需要从EACH连接的表中获取所需的字段。

+0

这导致“未知的表order_domains” – Edelweiss

0

尝试将这两个更改为LEFT OUTER JOIN。这样,如果这些表上没有匹配的记录,它不会阻止返回的行(在这种情况下,这些表中的字段将被设置为NULL)。

不是真的笨肯定,但认为这是做这样的事情: -

$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');