【问题标题】:Getting joining tables not working codeigniter获取加入表不起作用codeigniter
【发布时间】:2015-04-21 09:18:55
【问题描述】:

当我使用$this->db->where()$this->db->join() 时,它不会检索任何数据。当 var dump 说 NULL.

在我的旧代码上它工作正常,在查询中使用 JOIN。无法弄清楚我错过了什么。

旧代码运行良好

public function get_admin_category($category_id) {
$language_id = $this->check_language();

$query = $this->db->query("SELECT DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '  >  ') FROM " . $this->db->dbprefix . "category_path cp LEFT JOIN " . $this->db->dbprefix . "category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = '" . (int)$language_id . "' GROUP BY cp.category_id) AS path, (SELECT DISTINCT keyword FROM " . $this->db->dbprefix . "url_alias WHERE query = 'category_id=" . (int)$category_id . "') AS keyword FROM " . $this->db->dbprefix . "category c LEFT JOIN " . $this->db->dbprefix . "category_description cd2 ON (c.category_id = cd2.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd2.language_id = '" . (int)$language_id . "'");

return $query->row_array();
}

我尝试过的新代码。

public function get_admin_category($category_id) {
    $language_id = $this->check_language();
    $this->db->select('GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR "  >  ")');
    $this->db->distinct();
    $this->db->from($this->db->dbprefix . 'category_path cp', 'LEFT');
    $this->db->join($this->db->dbprefix . 'category_description cd1', 'cp.path_id = cd1.category_id AND cp.category_id != cp.path_id', 'LEFT');
    $this->db->where('cp.category_id', 'c.category_id');
    $this->db->where('cd1.language_id', $language_id);
    $query = $this->db->get();
    return $query->row_array();
}

如何将旧的 $this->db->query 转换为使用 join 的 codeigniter。 http://www.codeigniter.com/userguide2/database/active_record.html

【问题讨论】:

  • 你能用表格结构更新你的问题以及预期的结果吗?

标签: mysql codeigniter join


【解决方案1】:

试试这个,它会为你工作。

$this->db->select("DISTINCT *,(SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '  >  ') FROM " . $this->db->dbprefix . "category_path cp LEFT JOIN " . $this->db->dbprefix . "category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = '" . (int)$language_id . "' GROUP BY cp.category_id) AS path, (SELECT DISTINCT keyword FROM " . $this->db->dbprefix . "url_alias WHERE query = 'category_id=" . (int)$category_id . "') AS keyword", false);
$this->db->from($this->db->dbprefix . "category c");
$this->db->join($this->db->dbprefix . "category_description cd2", "c.category_id = cd2.category_id", "left");
$this->db->where("c.category_id", intval($category_id));
$this->db->where("cd2.language_id", intval($language_id));
$result = $this->db->get()->row_array();
return $result;

【讨论】:

  • 使用您的代码,我必须在底部添加$query = $this->db->get(); return $query->row_array();,然后就可以使用了。
【解决方案2】:

试试这个:

$this->db->select('DISTINCT *');
$this->db->select("(SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '  >  ') FROM " . $this->db->dbprefix . "category_path cp LEFT JOIN " . $this->db->dbprefix . "category_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = '" . (int)$language_id . "' GROUP BY cp.category_id) AS path", FALSE);
$this->db->select("(SELECT DISTINCT keyword FROM " . $this->db->dbprefix . "url_alias WHERE query = 'category_id=" . (int)$category_id . "') AS keyword", FALSE);
$this->db->from($this->db->dbprefix . "category c");
$this->db->join($this->db->dbprefix . "category_description cd2", "c.category_id = cd2.category_id", "left");
$this->db->where("c.category_id", intval($category_id));
$this->db->where("cd2.language_id", intval($language_id));

【讨论】:

  • 不走运我得到语法错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR ' > &' at line 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2016-10-01
相关资源
最近更新 更多