WHERE EXISTS(子查询)的 CodeIgniter 查询构建器语法

问题描述 投票:0回答:4

我正在尝试使用

进行子查询
$this->db->where(" EXISTS (SELECT * FROM myTable)");

但是不行,它的输出是:myquery + WHERE 'EXISTS (SELECT * FROM myTable);

EXISTS 之前的引号使查询无法解析!

有谁知道如何解决吗?

php mysql codeigniter subquery exists
4个回答
6
投票

请删除 EXISTS 关键字前后的空格。这样不会显示任何错误。

$this->db->where("EXISTS(SELECT * FROM myTable)");

4
投票

也许你可以尝试使用

将转义设置为 false

$this->db->where(" EXISTS (SELECT * FROM myTable)", null, false);

这是 DB_active_rec.php 中 where() 的片段

公共函数 where($key, $value = NULL, $escape = TRUE)


1
投票

试试这个。

不要使用“where”子句,请写下完整的查询字符串并使用 $this->db->query(); 执行查询

    $qry_string= $yourquery . "WHERE EXISTS (SELECT * FROM myTable)";
    $this->db->query($qry_string);

0
投票

为了避免编写原始 SQL 并确保在子查询中转义/引用,请使用

get_compiled_select()
来呈现子查询。 我假设您的子查询中有更多逻辑,但对于所提出的问题,您可以将表名称传递到
get_compiled_select()
中,并且
SELECT *
将是应用的默认 SELECT 子句。

一旦子查询安全呈现,您只需将

false
作为
where()
的第三个参数传递即可关闭其父 WHERE 子句中的转义。

$this->db->where('EXISTS (' . $this->db->get_compiled_select('myTable') . ')', null, false);

父查询的 WHERE 子句将呈现为:

WHERE EXISTS (SELECT * FROM `myTable`)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.