php - 使用 Codeigniter 的 ActiveRecord 语法构建包含 UNION 和子查询的 SELECT 查询

标签 php mysql codeigniter activerecord union

我有一个计算连接表中 id 的查询。我需要将返回的表与数据库中的另一个表进行并集。

第一个查询返回的表有 4 列:

  • group_id
  • 计数
  • 姓名
  • 描述

我想要与第一个表合并的表有 3 列:

  • group_id
  • 姓名
  • 描述

我通过 phpmyadmin 运行查询,它运行得很好。查询:

SELECT group_id, size, name, description
FROM(SELECT *, count(group_id) as size
     FROM table1 
     GROUP BY group_id) as tmp
JOIN table2
ON tmp.group_id = table2.group_id
UNION
SELECT id, 0 as size, name, description
FROM table2

但是当我尝试使用 codeigniter 进行查询时,它不起作用。

Error: Unknown column '0' in 'field list'

SELECT id, 0 as size, name, description 
FROM table2

这是模块中的 Codeigniter 代码:

$this->db->select('group_id, size, name, description');
$this->db->from('(select *, count(group_id) as size from table1 group by group_id) as tmp');
$this->db->join('table2', 'tmp.group_id=table2.id');

$this->db->get();

$query1 = $this->db->last_query(); 

$this->db->select('id, 0 as size, name, description');
$this->db->from('table2');

$this->db->get();
$query2 = $this->db->last_query(); 

$this->db->query($query1. ' UNION ' .$query2);
$query = $this->db->get();
return $query->result_array();

简单来说,我需要知道如何使用 Codeigniter 制作占位符,或者是否有其他更好的方法来获得我需要的结果?

最佳答案

您必须通过添加 FALSE 值作为 codeigniter 事件记录 select() 函数的第二个参数来转义 select 查询。
所以,应该这样写:

$this->db->select('id, 0 as size, name, description',FALSE);

当您将 FALSE 值添加到其第二个参数时,codeigniter 不会将第一个参数保留为查询中的 backtick 字符初始化。

关于php - 使用 Codeigniter 的 ActiveRecord 语法构建包含 UNION 和子查询的 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30793180/

相关文章:

php - 如何从文件中动态删除问号垃圾数据?

php - 拉维尔 5.1 : How to upload multiple files from three different file input fields?

MySQL 查询检查查询是否返回任何重复项

php - 为 SQL 行分配唯一页

php - SQL 无限日历模式

php - 从数据库 SQL 中的唯一 ID 获取最后一个数字 - PHP CodeIgniter

php - 如何在 cakephp 3 中拥有全局参数?

php - 如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件

php - 从 MySQL 数据库填充复选框

php - 将 insert_id() 从一个函数获取到另一个函数