sql >> Databasteknik >  >> RDS >> Mysql

Union två tabeller med kategorier i en fråga som hämtar kategorier och dess överordnade

För det första stöder din version av MySQL (MariaDB 10.3) vanliga tabelluttryck, så du har ett sätt att undvika användningen av muterande variabler i dina frågor. Att mutera variabler i en fråga har varit ett sätt att utföra hierarkiska frågor innan vanliga tabelluttryck stöddes, men det är en taktik som är utfasad och för vilken det inte finns någon dokumenterad garanti för att den alltid kommer att fungera som avsett.

Så här är frågan för att göra samma sak med ett vanligt tabelluttryck (cte), där 8 är exempelvärdet (ersätt det med PHP-uttrycket):

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;

Och nu, när du har den här andra tabellen, kan du först göra ett vanligt tabelluttryck för att definiera föreningen och sedan fortsätta som ovan:

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. Openshift:Hur fjärråtkomst till MySQL?

  2. Gjut int till varchar

  3. Introduktion till specialfrågor

  4. Databasanslutning sträng och sortering