gpt4 book ai didi

php - MySQL 查询为 Code Igniter Active Directory 格式?

转载 作者:行者123 更新时间:2023-11-29 08:19:05 29 4
gpt4 key购买 nike

我正在尝试将 mysql 查询纳入 Code Igniter 的 Active Record 语法,但遇到了一些困难。

查询是这个问题的结果:Multiple mysql ORDER BY's for multidimensional ordering/grouping

我尝试自己格式化查询,解决了一些错误,但不确定如何进行。我必须自己将 get_compiled_select() 函数添加到 DB_active_rec.php 中,并将 _reset_select() 从 protected 更改为 public 以使其根本就跑。

建议的查询是:

select
t.id,
t.group,
t.date,
t.comlete
from
YourTable t
left join
(select
m.group,
min(m.date) as mindate,
min(t.complete) as groupcomplete
from
YourTable m) mt on mt.group = t.group
order by
coalesce(mt.groupcomplete, t.complete),
coalesce(mt.mindate, t.date),
t.group,
t.complete,
t.date

我的翻译如下(请注意,原文中没有“where”子句,而“date”实际上是“due”):

        // Sub query
$this->db->select('m.group, min(m.due) as mindate, min(t.complete) as groupcomplete');
$this->db->from('task m');
$this->db->where('property', $property);

$subquery = $this->db->get_compiled_select();

$this->db->_reset_select();

// Main query
$this->db->select('*');
$this->db->where('property', $property);
$this->db->from('task t');
$this->db->join('($subquery) mt','mt.group = t.group');

$this->db->order_by('coalesce(mt.groupcomplete, t.complete)');
$this->db->order_by('coalesce(mt.mindate, t.due)');
$this->db->order_by('t.group');
$this->db->order_by('t.complete');
$this->db->order_by('t.due');

$query = $this -> db -> get();

// Return
return $query->result();

不幸的是,这只是抛出一个错误:

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 'mt ON `mt`.`group` = `t`.`group` WHERE `property` = '7' ORDER BY coalesce(mt.gr' at line 3

CI 报告的查询如下所示:

SELECT * FROM (`task` t) JOIN ($subquery) mt ON `mt`.`group` = `t`.`group` WHERE `property` = '7' ORDER BY coalesce(mt.groupcomplete, `t`.`complete)`, coalesce(mt.mindate, `t`.`date)`, `t`.`due`, `t`.`complete`, `t`.`date`

任何人都可以就如何正确格式化此内容提供一些建议吗?不幸的是,我的 mysql 技能非常贫乏,所以这正在提升我的能力。我的翻译方法大部分来自 Stack Overflow 上的答案,因为我没有以这种方式(与子查询)组合查询的经验。

最佳答案

问题(或“问题之一”)在这里:

$this->db->join('($subquery) mt','mt.group = t.group');

您使用单引号,因此变量 $subquery 不会扩展。这也可以在 CodeIgniter 输出的查询中看到。

关于php - MySQL 查询为 Code Igniter Active Directory 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19931256/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com