Проблема в том что в данный момент сначала выбираються родительские категории имеющие parent_id = 0, затем идет foreach и только потом от каждой идет запрос на parent_id = category_id, в итоге если на главной 12-15 категорий то это 20 запросов в лучшем случае, подскажите при такой реализации (см. ниже) реально ли сделать 1 запрос для выборки категории и её ПОД категорий? Услуга загрузки информации из интернет может помочь в этом вопросе. (Всегда были проблемы с этим буду очень благодарен за любую помощь). Функция контроллера: Код (Text): $categories = $this->CBoard->findAllCategories($user_language, $limit, 0, 0, 0); if(is_array($categories)) { foreach($categories as $key => $category) { echo 'Категория родитель: '.$category->trans_title.' '; $parent_categories = $this->CBoard->findAllCategories($user_language, $parent_limit, 0, 0, $category->category_id); if(is_array($parent_categories)) { foreach ($parent_categories as $parent_category) { echo 'Подкатегория: '.$parent_category->trans_title.', '; } } } } Функция из Active Record: Код (Text): public function findAllCategories($language = '', $limit = 0, $offset = 0, $category_id = 0, $parent_id = 0) { if($language) { $this->db->join('board_categories_trans', 'board_categories_trans.trans_category_fk = board_categories.category_id', 'left'); $this->db->where('trans_language', $language); } if($parent_id >= 0) { $this->db->where('category_parentid', $parent_id); } if($category_id > 0) { $this->db->order_by('category_id = '.$category_id, 'desc'); } $this->db->order_by('category_id', 'desc'); if($limit > 0) { $this->db->limit($limit, $offset); } $query = $this->db->get('board_categories'); if($query->num_rows > 0) { return $query->result(); } else { return FALSE; } }
newnoob Защитникам ORM и AR - любуйтесь, как выглядит код простой выборки :lol: 1. Если хранить в виде Nested Sets, то: SELECT * FROM table ORDER BY itemleft WHERE itemlevel<=2 2. Допустим, выбрал все одним запросом, а как со своим AR разбирать по категориям-то собираешься?
За Nested Sets спасибо вроде то что нужно. Эт не мой AR, а CodeIgniter`а =) Второй вопрос не понял... p.s. Почитай доки там на вкус и цвет, мне удобнее писать запросы так, кому то достаточно и $this->db->query($sql); p.s.s. Можешь еще почитать смешные цитаты и немного расслабиться
Nested Sets это лучший вариант, но чисто вопрос для интереса, это чего, апогей выборки данных из дерева? Может кто чего ещё производительнее и шустрее придумал?
это блин что? по сабжу - в простейших вариантах составляется список потомков узла и следующим запросом идет поиск их потомков. то есть кол-во запросов равняется уровню вложенности.
Я люблю Redundant Adjacency List. =)) ну и традиционная ссылка: http://www.php.ru/forum/viewtopic.php?t=27758