如何在 CI 中运行子查询
Posted
技术标签:
【中文标题】如何在 CI 中运行子查询【英文标题】:How to run subquery in CI 【发布时间】:2018-01-05 16:06:06 【问题描述】:大家好,我正在尝试在 codeigniter 中运行子查询。我已经这样做了
$this->db->where('id NOT IN (SELECT friend_id FROM friend_list WHERE user_id = '$id')');
我的函数是这样的
public function get_all_users()
$id=$this->session->userdata['user_id'];
$this->db->select("id,username");
$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')');
$this->db->where('id !=2');
$this->db->from('users');
$query=$this->db->get();
if ($query->num_rows() > 0)
return $query->result();
return false;
但它正在返回此错误
Message: syntax error, unexpected '$id' (T_VARIABLE), expecting ',' or ')'.
如果我在 $id 的速度上设置一些值,那么它会给出结果。我该如何解决这个问题。请帮帮我。
【问题讨论】:
转义引号或使用大小写混合$this->db->where("id NOT IN (SELECT friend_id FROM friend_list WHERE user_id = '$id')");
Codeigniter 内置在 codeigniter.com/user_guide/database/… 中没有的地方
@Tpojka 谢谢 :)
Np。编码愉快。
【参考方案1】:
您忘记转义相同的(单)引号:
你应该写成:
$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = \'$id\')');
或
$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = ' . $id . ')');
或
$this->db->where("id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')");
【讨论】:
【参考方案2】:首先你需要包含子查询的库:
$this->load->library('subquery');
然后像这样输入您的查询:
这就是我们在 CI 中编写子查询的方式 方法一:
$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')', NULL, FALSE);
或者你也可以这样写: 方法二:
$this->db->select('id,username')->from('users');
$sub = $this->subquery->start_subquery('where_in');
$sub->select('friend_id')->from('friend_list');
$sub->where('user_id', $id);
$this->subquery->end_subquery('id', FALSE);
您可以查看此参考: subquery in codeigniter active record
【讨论】:
只是想澄清一下,如果您想使用第二个选项,您需要将此 library 添加到您的 CI 设置中。因为据我所知 CI 没有任何$this->subquery->start_subquery
功能。
@disha subQuery 是一个库,在使用子查询方法之前需要加载
@cyberrspiritt:是的。我们需要为子查询添加库。即:$this->load->library('subquery');以上是关于如何在 CI 中运行子查询的主要内容,如果未能解决你的问题,请参考以下文章