sql >> Databáze >  >> RDS >> Mysql

Spojte dvě tabulky s kategoriemi v dotazu, který načte kategorie a jejich rodiče

Za prvé, vaše verze MySQL (MariaDB 10.3) podporuje běžné tabulkové výrazy, takže máte způsob, jak se vyhnout použití mutujících proměnných ve vašich dotazech. Mutace proměnných v dotazu je způsob, jak provádět hierarchické dotazy dříve, než byly podporovány běžné tabulkové výrazy, ale je to taktika, která je zastaralá a u níž neexistuje žádná zdokumentovaná záruka, že bude vždy fungovat tak, jak bylo zamýšleno.

Zde je tedy dotaz, který provede totéž s běžným tabulkovým výrazem (cte), kde 8 je vzorová hodnota (nahraďte ji výrazem 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;

A nyní, když máte tuto druhou tabulku, můžete nejprve vytvořit společný tabulkový výraz pro definování sjednocení a poté pokračovat výše uvedeným způsobem:

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. Jak přidám hlas do své databáze ve formuláři?

  2. Jak vytvořit DMZ pro EBS R12

  3. Jsou připojení k mému serveru MySQL šifrovaná a bezpečná?

  4. Vytvořit databázovou tabulku ActiveRecord bez sloupce :id?