sql >> Database teknologi >  >> RDS >> Mysql

Forbind to tabeller med kategorier i en forespørgsel, der henter kategorier og deres forældre

For det første understøtter din version af MySQL (MariaDB 10.3) almindelige tabeludtryk, så du har en måde at undgå brugen af ​​muterende variabler i dine forespørgsler. Mutation af variabler i en forespørgsel har været en måde at udføre hierarkiske forespørgsler før almindelige tabeludtryk blev understøttet, men det er en taktik, der er forældet, og som der ikke er nogen dokumenteret garanti for, at den altid vil virke efter hensigten.

Så her er forespørgslen om at gøre det samme med et almindeligt tabeludtryk (cte), hvor 8 er eksempelværdien (erstat den med PHP-udtrykket):

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;

Og nu, når du har denne anden tabel, kan du først lave et fælles tabeludtryk for at definere foreningen og derefter fortsætte som ovenfor:

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. MySQL 5.7.5+ får første række for grupperne

  2. CakePHP 2.3.1 updateAll forespørgsel virker ikke

  3. SELECT-forespørgsel returnerer 1 række fra hver gruppe

  4. (2006, 'MySQL-serveren er gået væk') i WSGI django