sql >> Database >  >> RDS >> Mysql

Combineer twee tabellen met categorieën in een query die categorieën en hun bovenliggende categorieën ophaalt

Ten eerste ondersteunt uw versie van MySQL (MariaDB 10.3) veelvoorkomende tabelexpressies, zodat u het gebruik van muterende variabelen in uw query's kunt vermijden. Het muteren van variabelen in een query was een manier om hiërarchische query's uit te voeren voordat algemene tabeluitdrukkingen werden ondersteund, maar het is een tactiek die is verouderd en waarvoor geen gedocumenteerde garantie is dat deze altijd zal werken zoals bedoeld.

Dus hier is de vraag om hetzelfde te doen met een algemene tabeluitdrukking (cte), waarbij 8 de voorbeeldwaarde is (vervang deze door de PHP-uitdrukking):

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;

En nu, als je deze tweede tabel hebt, kun je eerst een algemene tabeluitdrukking doen om de unie te definiëren, en dan verder gaan zoals hierboven:

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. Integer-waarde invoegen in mysql int met INSERT

  2. De verschillen tussen tabel- en transactie-API's begrijpen

  3. Hoe de zorgsector databases gebruikt

  4. Wildfly en automatisch opnieuw verbinding maken met de database