Saya punya satu meja yang disebut tamu.

Tamu dapat berupa guest atau plus_one.

Jika ini adalah plus_one plus_one ini terhubung ke guest oleh master_id. Kolom id bertambah secara otomatis.

Meja

id   master_id  type
1    1          guest
2    1          plus_one
3    3          guest
4    3          plus_one
5    5          guest
6    6          guest

Hasil yang diharapkan dari kueri adalah larik dengan larik untuk setiap tamu, dan jika tamu tersebut memiliki plus_one yang dilampirkan melalui master_id, ia memilikinya sebagai sub larik.

Mengambil tabel di atas, seharusnya terlihat seperti ini (disederhanakan):

[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

Saya pikir saya perlu melakukan self join, tetapi saya tidak tahu bagaimana dan juga tidak tahu bagaimana cara mendapatkan sub array sebagai hasilnya. Apa yang saya coba:

$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
eskimo 1 Desember 2017, 19:30

1 menjawab

Jawaban Terbaik

Anda tidak bisa mendapatkannya hanya dari satu permintaan. Kueri mengembalikan baris X dengan kolom X. Tapi itu tidak bisa diekspresikan sebagai array multidimensi.

Anda memiliki dua opsi di sini:

1: Dapatkan daftar tamu (termasuk plus_one) lalu ulangi (dalam a untuk masing-masing) dan jika "plus_one" panggil metode untuk membawa anaknya.

Atau... (Tidak terlalu cantik)

2: Bergabunglah dengan tabel Anda dengan dirinya sendiri (seperti yang Anda lakukan) dan tetapkan alias untuk setiap properti anak. Sesuatu seperti ini:

SELECT
    a.*, 
    b.id as plus_one_id,
    b.master_id as plus_one_master_id

Tapi sekali lagi, hasilnya di sini bukan array multidimensi. Hanya satu baris dengan semua data. (Atau nol). Aku akan pergi untuk yang pertama.

0
NiMusco 1 Desember 2017, 22:57