10/10/2018, 11:29

Vấn đề này có phải liên quan đến đệ qui k? Xin giúp đỡ...



Mình có bảng user gồm id và parent_id, username,... mỗi id sẽ có parent_id là id khác. Trong trường hợp hình trên, mình đang chạy funtion có id = 1, id 1 này có 2 con là cty1 và cty2 (cty1 và cyt2 có parent_id là 1), cty1 lại có con là cty3 (cty3 có parent_id là id của cty1), cty3 có con là cty4 (cty4 có parent_id là id của cty3)....


Giờ vấn đề là mình dùng cách gì để đếm trong hệ thống của id = 1 có bao nhiêu người, như trong hình thì mình đang chạy funtion có id = 1, vậy trong hệ thống của tôi có 7 người, xin nhờ cao thủ giúp mình cách tính ra con số 7 (số 7 chỉ là ví dụ)

Xin nhờ cao thủ trợ giúp.
Tuyển người design skin cho
stano1 viết 13:40 ngày 10/10/2018
Đúng là cần đệ quy đó bạn , hoặc có thể làm thủ công theo mysql_fetch_array
php_code viết 13:37 ngày 10/10/2018
Post nguyên cái hàm viết = codeigniter, đôi khi nó tính đúng, đôi khi lại sai. Anh em xem dùm mình với.

@stano1: bạn có thể hướng dẫn chi tiết dùm mình k?

public function so_nguoi_co_trong_cay($user_id, $total_users = 0) {
$query_members = $this->db->select('*')
->from('vd_members')
->where('parent_id', $user_id)
->order_by('username', 'ASC')
->get();
$members = $query_members->result();

$total_users += $query_members->num_rows();

if(!empty($members)) {
foreach($members as $member)
{
$is_parent = $this->db->select('*')
->from('vd_members')
->where('parent_id', $member->id)
->order_by('username', 'ASC')
->get()->num_rows();

$total_users += $is_parent;

if($is_parent > 0) {
$this->so_nguoi_co_trong_caycay($member->id, $total_users);
}
}
}

return $total_users;
}
ebookfinder viết 13:46 ngày 10/10/2018
Bạn dùng phép "tự kết" của 1 bảng, bổ sung thêm trường selfref đánh dấu con đã tìm đc cha, thì bằng câu lệnh SQL cũng cho ra kết quả. Việc viết 1 thủ tục đệ qui để dò mẫu tin trong table, cho dù là dùng stored proc cũng kém hiệu quả lắm.
php_code viết 13:42 ngày 10/10/2018
Được gửi bởi ebookfinder
Bạn dùng phép "tự kết" của 1 bảng, bổ sung thêm trường selfref đánh dấu con đã tìm đc cha, thì bằng câu lệnh SQL cũng cho ra kết quả. Việc viết 1 thủ tục đệ qui để dò mẫu tin trong table, cho dù là dùng stored proc cũng kém hiệu quả lắm.
Kĩ thuật này mình chưa nghe qua, bạn có thể demo dùm mình k? Chân thành cảm ơn bạn.
zmt264 viết 13:39 ngày 10/10/2018
Được gửi bởi php_code
Kĩ thuật này mình chưa nghe qua, bạn có thể demo dùm mình k? Chân thành cảm ơn bạn.
"Tự Kết", mình đoán chính là "Tự Liên Kết" hay tiếng Anh là Self Join, đây là kỹ thuật thông thường thôi.
php_code viết 13:37 ngày 10/10/2018
Thank a Tuấn, e sẽ xem xét vấn đề self join này.

Được gửi bởi zmt264
"Tự Kết", mình đoán chính là "Tự Liên Kết" hay tiếng Anh là Self Join, đây là kỹ thuật thông thường thôi.
zmt264 viết 13:44 ngày 10/10/2018
Được gửi bởi php_code
Thank a Tuấn, e sẽ xem xét vấn đề self join này.
uhm, đây là kỹ thuật tổ chức dữ liệu căn bản trong db, mà thank thì bấm nút thank (like) là được rồi , ko cần nói ra đâu
php_code viết 13:41 ngày 10/10/2018
Thật sự là mình làm hết khả năng rồi, nhưng vẫn chưa giải quyết dc vấn đề. Xin nhờ sự giúp đỡ.
ebookfinder viết 13:33 ngày 10/10/2018
Bạn có thể chỉnh lại cấu trúc bảng đc ko? với các trường: t(id, pid, level, info)
trong đó level(id) = level(pid)+1, level giúp
1) hiển trị cây các id
2) khi sql thì thực hiện theo từng level

bạn cho t tự liên kết:
Giả sử level của id xuất phát là k, đặt cur_level = k-1

set cur_level = cur_level+1; SELECT ... FROM t AS t1 INNER JOIN t AS t2 ON t1.id=t2.pid WHERE t1.level = cur_level

lặp cái sql này đến khi ko còn lấy được thêm mẩu tin.
Bài liên quan
0