Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Βασικά Γεια σας και καλές γιορτές.

Αρχικά έχω έναν πίνακα σε μια MySql Db η δομή του είναι η παρακάτω


----------------------------

         Categories
----------------------------

|    (pk)     id                |
|--------------------------- 

|            name             |
|--------------------------- 
|    (fk)    parent           |
|---------------------------

Ουσιαστικά το parent είναι foreign key και συνδέετε με το id του ίδιου πίνακα
το parent μπορεί να έιναι null.

Στην περίπτωση που το parent είναι null τότε καταλαβαίνουμε ότι η κατηγορία δεν έχει Childs.

Αυτό που θέλω είναι έναν αλγόριθμο o οποίος θα μου δίνει αποτέλεσμα ένα array της παρακάτω δομής

[

    {

          name: 'Cat0',

          subcategories: [

                 {...},

                  ....,

                  {...}

          ]

    },
    {

          name: 'Cat1',

          subcategories: [
                 {...},

                 .,
                 .,

                {

                    name: 'Cat6',

                    subcategories:[...]

                }
          ]

    },
    {name: 'Cat'2, subcategories: [{}, ...., {}]},

]

Ευχαριστώ

Δημοσ.

Καλημέρα, σε ποια γλώσσα το θες;

 

Η λογική λέει ότι πρώτα θα κάνεις ερώτηση στη βάση WHERE `parent` = NULL . Έτσι θα βρεις όλες τις κύριες κατηγορίες.

Και στη συνέχεια για κάθε αποτέλεσμα θα ρωτάς τη βάση για τις εγγραφές που είναι στην ίδια κατηγορία.

Και έτσι θα φτιάξεις το πίνακα που θες.

Δημοσ. (επεξεργασμένο)

Καλημέρα, σε ποια γλώσσα το θες;

 

Η λογική λέει ότι πρώτα θα κάνεις ερώτηση στη βάση WHERE `parent` = NULL . Έτσι θα βρεις όλες τις κύριες κατηγορίες.

Και στη συνέχεια για κάθε αποτέλεσμα θα ρωτάς τη βάση για τις εγγραφές που είναι στην ίδια κατηγορία.

Και έτσι θα φτιάξεις το πίνακα που θες.

Γράφω στο Laravel οπώτε σε PHP..

Έφτιαξα μια Helper class που περιέχει την παρακάτω static function

 

 

public static function multiLevelGenerate($level = NULL, $tree = array()){
          $rootLevel = ($level == NULL)?\Category::whereNull('parent')->get():\Category::where('parent', '=', $level)->get();          
          if($rootLevel->count() > 0){
               $i = 0;
               foreach ($rootLevel as $item){
                    $tree[$i] = $item;

                    $childs = $item->childs();
                    if($childs->count() > 0){
                         //$tree[$i]['subcategories'] = self::multiLevelGenerate($item->id, $tree);
                           $tree[$i]['subcategories'] = self::multiLevelGenerate($item->id);
                    }
                    $i++;
               }
          }
          
          return $tree;
     }

Νομίζω ότι βγαίνει σωστά.. Αλλά θα ήθελα να ξέρω αν είναι overkill για τον server κάτι τέτοιο.

Επεξ/σία από chrism4111
Δημοσ.

Οχιιιιιιι, μην κάνεις recursive calls στην βάση για το δέντρο.  :confused:

 

Πάρε όλα τα δεδομένα από την βάση σε ένα array και φτιάξε το δέντρο από αυτό.

Δημοσ.

εγώ θα εξέταζα Δενδρική δομή με reference στον ίδιο πίνακα.

 

Γενικά τα hierarchical data χρειάζονται recursion. εκτός αν θες πεπερασμένο αριθμό σε βάθος οπότε θες πεπερασμένο αριθμό σε Joins.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...