我有一张名为来宾的桌子。
来宾可以是guest
或plus_one
。
如果是plus_one
,则plus_one
由master_id连接到guest
。列id
正在自动递增。
表
id master_id type
1 1 guest
2 1 plus_one
3 3 guest
4 3 plus_one
5 5 guest
6 6 guest
查询的预期结果是一个数组,其中包含每个guest虚拟机的数组,如果该guest虚拟机通过master_id连接了plus_one,则将其作为子数组。
按照上面的表格,它应该看起来像这样(简化):
[0]
['id'] => 1
['master_id'] => 1
['type'] => guest
['plus_one'] => // This is a sub array
['id'] => 2
['master_id'] => 1
[1]
['id'] => 3
['master_id'] => 3
['type'] => guest
['plus_one'] => // This is a sub array
['id'] => 4
['master_id'] => 3
[2]
['id'] => 5
['master_id'] => 5
['type'] => guest
[3]
['id'] => 6
['master_id'] => 6
['type'] => guest
我认为我需要进行自我加入,但我无法弄清楚如何以及也无法弄清楚如何获取子数组作为结果。我尝试过:
$this->db->from('guests a');
$this->db->join('guests b', 'a.master_id = b.master_id', 'left outer');
$query = $this->db->get();
return $query->result_array();
答案 0 :(得分:0)
你只能通过一个查询得到它。查询返回X行的X行。但它不能表示为多维数组。
这里有两个选项:
1:获取访客列表(包括plus_one)然后迭代它(在for中为每个)并且如果它的“plus_one”调用该方法来带它的孩子。
或......(不那么漂亮)
2:自己加入你的桌子(就像你正在做的那样)并为每个子属性设置一个别名。 像这样:
SELECT
a.*,
b.id as plus_one_id,
b.master_id as plus_one_master_id
但同样,这里的结果不是多维数组。只有一行包含所有数据。 (或nulls)。我会去第一个。