如何在Codeigniter中编写类别/子类别数据库查询(一级深度)?

时间:2011-10-03 11:50:28

标签: php mysql codeigniter recursion tree

啊,PHP中父/子类的老问题。如果已经问过这个问题,我很抱歉(我知道它有多种形式),但是进行搜索无法使用一个查询和Codeigniter专门解答如何执行此操作。

基本上我正在使用Codeigniter开发一个分类广告网站。可以将列表分配给类别。一个类别可以是独立的(没有孩子),或者一个类别可以有一个孩子。

使用Codeigniter的“Active Record”功能,我有以下几乎可以工作。

$this->db->select('l.*');
$this->db->select('c.cat_parent, c.cat_slug, c.cat_name, c.cat_description, c.cat_display');
$this->db->select('c2.cat_slug AS parent_cat_slug, c2.cat_name AS parent_cat_name, c2.cat_description AS parent_cat_description, c2.cat_display AS parent_cat_display');

$this->db->limit($limit, $offset);

$this->db->join('listing_status ls', 'ls.status_id = l.listing_status');
$this->db->join('categories c', 'c.cat_id = l.listing_category');
$this->db->join('categories c2', 'c2.cat_parent = c.cat_id');

return $this->db->get('listings l')->result();

我希望能够提取一个列表,它已分配类别,如果该列表所属的类别具有父类,也可以获取父类别详细信息。我添加了2个连接,它应该正常工作,是否有我错过的东西?

1 个答案:

答案 0 :(得分:1)

经过一番混乱,我意识到我的第二次加入是错误的。这是我更新和工作的代码,希望它可以帮助其他人。

$this->db->select('l.*');
$this->db->select('c.cat_parent, c.cat_slug, c.cat_name, c.cat_description, c.cat_display');
$this->db->select('pc.cat_slug AS parent_cat_slug, pc.cat_name AS parent_cat_name, pc.cat_description AS parent_cat_description, pc.cat_display AS parent_cat_display');

$this->db->limit($limit, $offset);

$this->db->join('listing_status ls', 'ls.status_id = l.listing_status');
$this->db->join('categories c', 'c.cat_id = l.listing_category');
$this->db->join('categories pc', 'pc.cat_id = c.cat_parent');

return $this->db->get('listings l')->result();