10/10/2018, 11:45
Giúp sql/php:vấn đề câu lênh SQL lấy các row có parent trong table comment
Có 1 table 'comments':
comments(id,parentid,text,...) trong đó parentid = id "cha" của 1 row khác trong table 'comments', parentid = 0 là row "cha"
Mình muốn select (10rows):
id=1,parentid=0
---------id=2,parentid=1
---------id=3,parentid=1
---------id=5,parentid=1
id=4,parentid=0
---------id=10,parentid=4
id=6,parentid=0
id=9,parentid=0
---------id=7,parentid=9
---------id=8,parentid=9
Nhìn trên chắc bạn hiểu ý mình, các row "cha" sắp xếp theo id tăng dần, các row "con" trong 1 row "cha" cũng đc sắp xếp theo id tăng dần (trong row "cha")
Các bạn giúp mình câu lệnh sql [php]
Cám ơn nhiều!
comments(id,parentid,text,...) trong đó parentid = id "cha" của 1 row khác trong table 'comments', parentid = 0 là row "cha"
Mình muốn select (10rows):
id=1,parentid=0
---------id=2,parentid=1
---------id=3,parentid=1
---------id=5,parentid=1
id=4,parentid=0
---------id=10,parentid=4
id=6,parentid=0
id=9,parentid=0
---------id=7,parentid=9
---------id=8,parentid=9
Nhìn trên chắc bạn hiểu ý mình, các row "cha" sắp xếp theo id tăng dần, các row "con" trong 1 row "cha" cũng đc sắp xếp theo id tăng dần (trong row "cha")
Các bạn giúp mình câu lệnh sql [php]
Cám ơn nhiều!
Bài liên quan
1. Làm nhiều query, đầu tiên select * in comments where parent_id=0, tiếp theo ứng với mỗi kết quả thì select tiếp. Cách này có vẻ hơi tốn kém.
2. select * in comments limit 10 order by ID desc, để lấy 10 comment gần nhất, tiếp theo dùng PHP để phân tích thành structure như bên dưới.
Yêu cầu của bạn là loại yêu cầu thuộc về thứ tự cấp bậc (hierarchy). Nó là điểm nhược của CSDLLH. Nói cách khác là không có cách nào dùng SQL chuẩn mà làm được bảng như vậy một cách gọn gàng dễ hiểu.
Các cty cung cấp phần mềm lớn (Microsoft, Oracle, vv...) đều có cung cấp cách riêng của họ để làm việc này bằng tính chất đệ quy. Nếu muốn viết bằng lệnh truy xuất, bạn cần tìm hiểu về các cách này (vd TSQL dùng Common Table Expression, SQLPlus dùng Connect By Prior)
-1 query lấy 10 rows parentid = 0
-1 query nữa lấy các rows parentid IN(là các id của các rows trên), đương nhiên điều này ta có parentid != 0
Như thế chỉ có 2 query, việc còn lại dùng PHP làm tiếp.
Mình thấy cách nào cũng có nhược điểm là nếu số rows "con" lớn sẽ gặp khó khăn.
@chiase.net : Bạn nói đúng, nhưng mình chỉ hạn chế bậc 1 thôi. Chủ bài viết mới trả lời comment, và ng đã comment đó. Bạn nói mới nhớ tới quote! Ý hay.
Cám ơn mọi người.