如何在 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 中运行子查询的主要内容,如果未能解决你的问题,请参考以下文章

如何通过查询子文档将数组用作过滤器

如何在 MySQL 中运行子查询,并仅从 Python 获得 year = 2020?

如何在 Hive 中使用子查询

它是如何工作的? - 查询中的多个子选择

Mysql在where子句中优化子查询

我们如何在 Snowflake 中使用子查询,从 (select....) 中选择列失败