Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Liên kết hai bảng với các danh mục trong một truy vấn truy xuất các danh mục và cha mẹ của nó

Đầu tiên, phiên bản MySQL (MariaDB 10.3) của bạn hỗ trợ các biểu thức bảng phổ biến, vì vậy bạn có một cách để tránh việc sử dụng các biến thay đổi trong các truy vấn của mình. Việc thay đổi các biến trong một truy vấn là một cách để thực hiện các truy vấn phân cấp trước khi các biểu thức bảng phổ biến được hỗ trợ, nhưng đó là một chiến thuật không được dùng nữa và không có tài liệu đảm bảo rằng nó sẽ luôn hoạt động như dự định.

Vì vậy, đây là truy vấn để thực hiện tương tự với một biểu thức bảng chung (cte), trong đó 8 là giá trị mẫu (thay thế nó bằng biểu thức 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;

Và bây giờ, khi bạn có bảng thứ hai này, trước tiên bạn có thể thực hiện một biểu thức bảng chung để xác định liên hợp, sau đó tiếp tục như trên:

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. Nhận các bản ghi với <gì> cao nhất / nhỏ nhất cho mỗi nhóm

  2. Bảng đóng MySql sẽ không hỗ trợ danh mục phụ trùng lặp cho các bậc cha mẹ khác nhau

  3. MySQL - Xóa một số bảng cụ thể khỏi cơ sở dữ liệu lớn

  4. MySQL - sắp xếp chuỗi được phân tách bằng dấu phẩy trong cột

  5. Thêm khóa ngoại không thành công trong MySQL (errno 150)