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

Truy xuất MySQL cấp cao nhất của mẹ

Bạn sẽ phải sử dụng quy trình được lưu trữ để thực hiện.

Tìm tất cả các hàng có khả năng tìm kiếm =1, lưu trữ id và parent_id của chúng trong một bảng tạm thời, sau đó tự tham gia để thêm các hàng cha mẹ vào bảng tạm thời này. Ở cuối bảng, bạn chỉ có một bảng với các hàng có phần tử con có thể tìm kiếm được ở đâu đó dưới cây, vì vậy chỉ hiển thị các hàng không có gốc (ở trên cùng).

Giả sử bảng của bạn được gọi là 'my_table' thì bảng này sẽ hoạt động:

DELIMITER //
DROP PROCEDURE IF EXISTS top_level_parents//
CREATE PROCEDURE top_level_parents()
BEGIN
  DECLARE found INT(11) DEFAULT 1;
  DROP TABLE IF EXISTS parent_tree;
  CREATE TABLE parent_tree (id int(11) PRIMARY KEY, p_id int(11)) ENGINE=HEAP;
  INSERT INTO parent_tree
    SELECT id, parent_id FROM my_table
    WHERE searchable = 1;
  SET found = ROW_COUNT();
  WHILE found > 0 DO
    INSERT IGNORE INTO parent_tree
      SELECT p.id, p.parent_id FROM parent_tree c JOIN my_table p
      WHERE p.id = c.p_id;
    SET found = ROW_COUNT();
  END WHILE;
  SELECT id FROM parent_tree WHERE p_id = 0;
  DROP TABLE parent_tree;
END;//
DELIMITER ;

Sau đó, chỉ cần gọi nó:

CALL top_level_parents();

sẽ bằng SELECT id FROM my_table WHERE id_is_top_level_and_has_searchable_descendant



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Web2py - Di chuyển từ SQLite sang MySQL

  2. Chọn tất cả các bản ghi từ một bảng không tồn tại trong bảng khác trong Laravel 5.1

  3. Wordpress Lỗi nghiêm trọng:Lỗi chưa tìm thấy:Gọi đến hàm không xác định mysql_connect () trong /wp-includes/wp-db.php:1570

  4. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên CentOS 5

  5. Làm cách nào để phân vùng Mysql trên NHIỀU MÁY CHỦ?