Mysql
 sql >> база данни >  >> RDS >> Mysql

Обединете две таблици с категории в заявка, която извлича категории и техните родители

Първо, вашата версия на MySQL (MariaDB 10.3) поддържа общи таблични изрази, така че имате начин да избегнете използването на мутиращи променливи във вашите заявки. Мутирането на променливи в заявка е начин за изпълнение на йерархични заявки преди да се поддържат изрази за общи таблици, но това е тактика, която е отхвърлена и за която няма документирана гаранция, че винаги ще работи по предназначение.

И така, ето заявката да направите същото с общ израз на таблица (cte), където 8 е примерната стойност (заменете го с израза 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;

И сега, когато имате тази втора таблица, можете първо да направите общ израз на таблица за дефиниране на съюза и след това да продължите както по-горе:

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. Възможно ли е да се използват множество/вложени MySQLi изрази?

  2. Съхранение на урду знаци в MySQL

  3. Вмъкване NOW() в базата данни с активния запис на CodeIgniter

  4. Как да извлечете качени файлове с помощта на php

  5. Възможно ли е да се получи връзката на централна таблица с друга таблица в Laravel?