CodeIgniter从同一个表

时间:2017-12-01 16:30:59

标签: codeigniter activerecord

我有一张名为来宾的桌子。

来宾可以是guestplus_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();

1 个答案:

答案 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)。我会去第一个。