Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Gabungkan dua tabel dengan kategori dalam kueri yang mengambil kategori dan induknya

Pertama, versi MySQL Anda (MariaDB 10.3) mendukung ekspresi tabel umum, jadi Anda memiliki cara untuk menghindari penggunaan variabel yang bermutasi dalam kueri Anda. Memutasi variabel dalam kueri telah menjadi cara untuk melakukan kueri hierarki sebelum ekspresi tabel umum didukung, tetapi ini adalah taktik yang tidak digunakan lagi dan tidak ada jaminan terdokumentasi bahwa itu akan selalu berfungsi sebagaimana dimaksud.

Jadi, inilah kueri untuk melakukan hal yang sama dengan ekspresi tabel umum (cte), di mana 8 adalah nilai contoh (ganti dengan ekspresi PHP):

with recursive 
cte as (
    select 1 as categoryDepth,
           c.* 
    from   tbl_categories c
    where  categoryId = 8
    union
    select cte.categoryDepth + 1, 
           c.*
    from   cte
    inner join tbl_categories c
            on c.categoryId = cte.categoryParentId
)
select   * 
from     cte
order by categoryDepth desc;

Dan sekarang, ketika Anda memiliki tabel kedua ini, pertama-tama Anda dapat melakukan ekspresi tabel umum untuk mendefinisikan gabungan, dan kemudian melanjutkan seperti di atas:

with recursive 
base as (
    select * from tbl_categories
    union
    select * from tbl_categories_custom
),
cte as (
    select 1 as categoryDepth,
           base.* 
    from   base
    where  categoryId = 8
    union
    select cte.categoryDepth + 1, 
           base.*
    from   cte
    inner join base
            on base.categoryId = cte.categoryParentId
)
select   *
from     cte
order by categoryDepth desc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi pdo tanpa nama database?

  2. Cara mengubah kunci asing tabel MySQL menggunakan baris perintah

  3. mysql tidak dikenali sebagai perintah internal atau eksternal, program atau batch yang dapat dioperasikan

  4. membuat tugas jadwal tanpa pekerjaan Cron

  5. Cara menggunakan nama kolom saat membuat objek JSON, Python