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

Lấy tất cả các con theo id cha và mệnh đề where trong mysql

Có thể có hai cách giải thích. Từ một nhận xét gần đây, tôi hiểu rằng bạn cần nhận xét đầu tiên:

Loại trừ con của các bậc cha mẹ bị loại trừ

Vì vậy, ngay cả khi trẻ em không phải là biên tập viên, nếu một trong những tổ tiên của chúng là biên tập viên, chúng nên bị loại trừ. Điều đó có nghĩa là bạn nên loại trừ các bản ghi trong truy vấn bên trong nhất:thêm where ở đó:

select  id,
        name,
        parent_id,
        user_type
from    (select * from p
         where user_type <> 'editor'
         order by parent_id, id) products_sorted,
        (select @pv := '19') initialisation
where   find_in_set(parent_id, @pv)
and     length(@pv := concat(@pv, ',', id))

Bao gồm con cái của các bậc cha mẹ bị loại trừ

Theo cách hiểu này, bạn muốn bao gồm các phần tử con của người biên tập bất kể có bất kỳ tổ tiên nào của chúng bị loại trừ hay không.

Thêm user_type trong trường select danh sách và sau đó bao bọc truy vấn thực hiện bộ lọc, như sau:

select  *
from    (
        select  id,
                name,
                parent_id,
                user_type
        from    (select * from p
                 order by parent_id, id) products_sorted,
                (select @pv := '19') initialisation
        where   find_in_set(parent_id, @pv)
        and     length(@pv := concat(@pv, ',', id))
) as sub
where user_type <> 'editor'

Vì vậy, một lần nữa, ở đây kết quả cũng sẽ bao gồm các bản ghi mà hệ thống cấp bậc cha mẹ (cha mẹ, ông bà, ông bà nội, ...) có thể không được đưa vào hoàn toàn (vì một số trong số đó có thể được chỉnh sửa).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Doctrine - truy vấn con trong từ

  2. Hiển thị các bảng trong cơ sở dữ liệu SQLite bằng Python

  3. Mô hình Django đơn, nhiều bảng?

  4. Cách mã hóa (utf8mb4) bằng Python

  5. MySQL có thể nối các chuỗi với ||