PHP + MySQL: mySQL ebeveyn çocuk grupları aracılığıyla recursing tarafından değerlerinin toplamını bulma

0 Cevap php

Ben böyle bir mySQL tablo var:

Folders

[id] [name] [parent_id]
1    fruits  0
2    orange  1
3    lemon   2
4    steak   0

Projects

[id] [name]     [parent_id]   [hours]
1    project1    1            3
2    project2    2            4
3    project3    3            6
4    project4    4            7

Temelde projeler, farklı klasörler içinde oturabilir. Projelerin parent_id klasörün kimliği. Alt klasörler ve projeler alt klasörler içinde bulunabilir olabilir. Ve alt sınırsız # var.

Ben almak istiyorum sonucu bir klasör içinde toplam saatleri bulmak ve tüm alt klasörler bulunuyor. SO temelde yalak klasörü olacak ve tüm çocukların bulma (ve derin bir seviyeye ulaşmak til bunu yapmaya devam) bu klasörün içindeki klasörler ve toplam bir saat almak için bu her alt klasörleri içindeki tüm projeler için tüm saat ekleyerek.

Bir görev veya proje veritabanı olarak düşünün ve ben proje üzerinde harcanan toplam saati hesaplamak istiyorum.

MySQL veya PHP ile bunu yapmak için bir yolu var mı?

So far, I have the following info for mySQL. http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

Ve ben bu PHP işlevi var ama sorun ben sonuçlarından toplam eklemek için nasıl bilmiyorum olduğunu. Ben bir özyinelemeli fonksiyonu üzerinde bir dizi eklemek için nasıl bilmiyorum. Bu zaten yanlış belki ama ben sadece oraya atacağım düşündüm.

function categoryChild($id) {
    $s = "SELECT id FROM folders WHERE parent_id = $id";
    $r = mysql_query($s);
    $children = array();
    $hours = array();
    if(mysql_num_rows($r) > 0) {
        # It has children, let's get them.
        while($row = mysql_fetch_array($r)) {
            # Add the child to the list of children, and get its subchildren
            $ee['id'] = categoryChild($row['id']);
            $newid = $row['id'];
            $sql = "SELECT SUM(b.hours) as totalhours
            FROM folders a
            INNER JOIN projects b ON b.folder_id = a.id
            WHERE a.id = '$newid'";
            $result = mysql_query($sql);
            $children['hours'] = $row['totalhours'];

            }
        } 
        $s1 = "SELECT sum(hours) as totalhours FROM projects WHERE folder_id = $id";
        $r1 = mysql_query($s1);
        if(mysql_num_rows($r1) > 0) {
            while($row3 = mysql_fetch_array($r1)) {
            $children['hours'] = $row3['totalhours'];
            }
        }

    $data = $data['hours'];
    return $data;
}

0 Cevap