MySQL иерархический запрос на codeigniter - PullRequest
2 голосов
/ 12 февраля 2011

У меня проблемы с попыткой получить результаты из этой таблицы с помощью слагов.

| id | parent | slug       | name       |  
-----------------------------------------
|  1 | 0      | animations | animations |
|  2 | 1      | flash      | flash      |
|  3 | 2      | looped     | looped     |
|  4 | 1      | gif        | gif images |

Например, мне нужно получить категории, в которых родительский элемент - "анимации", а дочерний - "флеш".

Реальная проблема в том, что мне нужно искать результаты, используя category / $ parent_slug / $ child_slug, вместо этого использовать идентификаторы (category / $ id), чтобы получить |3|2|looped|looped|.

Это то, что яДо сих пор:

function get_category_childrens($category_parent=null){
    $this->db->select('*');
    if(!is_null($category_parent)){
        $this->db->where('categories.slug', $category_parent);
        $this->db->join('categories as l1', 'l1.parent = categories.id', 'left');
    }
    else{
        $this->db->where('categories.parent', '0');
    }
    $query = $this->db->get('categories');
    return $query->result_array();
} 

Сгенерированный sql:

SELECT *
FROM (`categories`)
LEFT JOIN `categories` as l1 ON `l1`.`parent` = `categories`.`id`
WHERE `categories`.`slug` = 'animations'  

Нет проблем, если вы не знаете CI, если у вас есть запрос или идея, пожалуйста, прокомментируйте.

Ответы [ 2 ]

3 голосов
/ 12 февраля 2011
SELECT *
FROM (`categories` as l1)
LEFT JOIN `categories` as l2 ON `l2`.`parent` = `l1`.`id`
LEFT JOIN `categories` as l3 ON `l3`.`parent` = `l2`.`id`
WHERE `l1`.`slug` = 'animations'
AND `l2`.`slug` = 'flash'
2 голосов
/ 12 февраля 2011
SELECT categories.*
FROM categories
LEFT JOIN categories AS parent ON categories.parent = parent.id
LEFT JOIN categories AS child ON categories.id = child.parent
WHERE (parent.name='animations') and (child.name = 'flash')

- это то, что, я думаю, вы ищете.

...