2

このコードを試すと:

$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 つの結合のうち 2 つをコメントアウトすると、次のようになります。

//$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

4 に答える 4

0

You could use the following in multiple blocks:

$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);
于 2013-06-21T14:12:00.017 に答える
0

この 2 つを 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');
于 2013-06-21T10:56:39.820 に答える
0

$this->db->last_query();実行して、実行された実際のクエリを表示できます。多くの場合、これを MySQL クライアントで実行し、クエリをいじって何が起こっているのかを把握すると便利です。

多くの場合、MySQL で EXPLAIN を使用していくつかの手がかりを得ることができます。

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

等...

于 2013-06-21T09:15:14.410 に答える
0

変化する

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

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

その後、いくつかの結果が得られた場合は、選択ステートメントで結合された各テーブルから必要なフィールドのみを保持します。

于 2013-06-21T09:27:25.093 に答える