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

Mysql chọn đệ quy nhận tất cả con với nhiều cấp độ

Không có giải pháp nào trước đây phù hợp với tôi. Cả hai chỉ hoạt động nếu cha mẹ được lưu vào cơ sở dữ liệu theo một thứ tự nhất định.

Tôi phải thừa nhận rằng tôi không hoàn toàn hiểu cách hoạt động của truy vấn nhưng có thể tìm ra cách phù hợp với tôi (ít nhất là tốt hơn các câu trả lời khác).

Dữ liệu mà truy vấn thứ nhất và thứ hai không hoạt động là:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

Nếu bạn sử dụng truy vấn thứ nhất và thứ hai trong tập dữ liệu này, đối với id 5, bạn chỉ nhận được kết quả là '6,7'. Nhưng nếu bạn sử dụng truy vấn của tôi, bạn sẽ nhận được:'6,7,2,3,4' là kết quả mong đợi.

Phiên bản của tôi:

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
JOIN
(SELECT @pv:=5) tmp
) a;

Hy vọng nó sẽ giúp một ai đó. Tôi không thể bình luận cũng như không tán thành các câu trả lời khác vì thiếu danh tiếng :(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bộ ký tự và đối chiếu chính xác có nghĩa là gì?

  2. Làm thế nào để tính toán tổng doanh số mỗi tháng trong MySQL?

  3. Câu lệnh chuẩn bị sẵn trong PHP PDO - Truy vấn LIKE trong MySQL

  4. Tính toán kích thước vùng đệm InnoDB cho Máy chủ MySQL của bạn

  5. Neo4j - Chọn dữ liệu với MATCH bằng Cypher