chrism4111 Δημοσ. 7 Δεκεμβρίου 2014 Δημοσ. 7 Δεκεμβρίου 2014 Βασικά Γεια σας και καλές γιορτές.Αρχικά έχω έναν πίνακα σε μια 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: [{}, ...., {}]}, ]Ευχαριστώ
exarhis Δημοσ. 7 Δεκεμβρίου 2014 Δημοσ. 7 Δεκεμβρίου 2014 Καλημέρα, σε ποια γλώσσα το θες; Η λογική λέει ότι πρώτα θα κάνεις ερώτηση στη βάση WHERE `parent` = NULL . Έτσι θα βρεις όλες τις κύριες κατηγορίες. Και στη συνέχεια για κάθε αποτέλεσμα θα ρωτάς τη βάση για τις εγγραφές που είναι στην ίδια κατηγορία. Και έτσι θα φτιάξεις το πίνακα που θες.
chrism4111 Δημοσ. 7 Δεκεμβρίου 2014 Μέλος Δημοσ. 7 Δεκεμβρίου 2014 (επεξεργασμένο) Καλημέρα, σε ποια γλώσσα το θες; Η λογική λέει ότι πρώτα θα κάνεις ερώτηση στη βάση 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 κάτι τέτοιο. Επεξ/σία 7 Δεκεμβρίου 2014 από chrism4111
exarhis Δημοσ. 7 Δεκεμβρίου 2014 Δημοσ. 7 Δεκεμβρίου 2014 Α σε PHP ωραία μπορώ να σε βοηθήσω. Η Helper Function δεν θα κάνει overkill στο server. Δε γίνετε αλλιώς
paparovic Δημοσ. 9 Δεκεμβρίου 2014 Δημοσ. 9 Δεκεμβρίου 2014 Οχιιιιιιι, μην κάνεις recursive calls στην βάση για το δέντρο. Πάρε όλα τα δεδομένα από την βάση σε ένα array και φτιάξε το δέντρο από αυτό.
cyclo Δημοσ. 12 Δεκεμβρίου 2014 Δημοσ. 12 Δεκεμβρίου 2014 εγώ θα εξέταζα Δενδρική δομή με reference στον ίδιο πίνακα. Γενικά τα hierarchical data χρειάζονται recursion. εκτός αν θες πεπερασμένο αριθμό σε βάθος οπότε θες πεπερασμένο αριθμό σε Joins.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα