查询 CodeIgniter

Posted

技术标签:

【中文标题】查询 CodeIgniter【英文标题】:query CodeIgniter 【发布时间】:2012-07-25 23:27:36 【问题描述】:

我编写了一个必须使用 CodeIgniter 执行的 SQL 查询。 我的查询是:-

SELECT COUNT('user_id') FROM tbl_tickets_replies WHERE user_id IN (SELECT id from tbl_users WHERE username IN (SELECT username FROM tbl_tickets WHERE site_referers_id =1))

我在我的模型中这样做

function getCommentNumbers() 
    $sql = "SELECT COUNT('user_id') FROM tbl_tickets_replies WHERE user_id IN (SELECT id from tbl_users WHERE username IN (SELECT username FROM tbl_tickets WHERE site_referers_id =1))";
    return $this->db->query($sql);

如何使用活动记录来做到这一点

它不工作:(

我有三个不同的表,它们是:-

tbl_users(id,username);
tbl_tickets(id,username,site_referers_id)
tbl_tickets_replies(id,user_id,comments)

我想要做的是选择属于具有 site_referers_id=1 的特定用户名的所有 cmets。 我想从具有 site_referes_id =1 的 tbl_tickets 中选择不同的用户名,然后从 tbl_users 获取所选用户名的 id 并使用该 id 来计算他有多少 cmets 并根据用户名显示它。 我的查询没有这样做,它显示所有用户的总 cmets,即 假设有两个用户 A 和 B,用户 id 1 和 2 有 10 和 15 个 cmets 那么它应该显示如下:

A   10
B   15

我的查询正在显示

A
B  25

【问题讨论】:

SELECT COUNT('user_id') 不会像您认为的那样做。您的意思是 SELECT COUNT(DISTINCT user_id)SELECT COUNT(*),具体取决于您要执行的操作。 @MarkByers:先生,我已经编辑了我的问题 Codeigniter 的 AR 不支持子查询,因此您无法在没有任何技巧的情况下使用 AR。 【参考方案1】:

您缺少的是 GROUP BY 聚合函数。

试试这个:

SELECT DISTINCT user_id, COUNT('user_id') FROM tbl_tickets_replies WHERE user_id IN
    (SELECT id from tbl_users WHERE username IN 
        (SELECT username FROM tbl_tickets WHERE site_referers_id =1)) GROUP BY user_id

【讨论】:

谢谢,你能帮我用codeigniter中的活动记录写吗 ***.com/questions/656622/… 请参阅此问题了解更多详细信息,但我认为您应该执行纯 mysql 查询。 Codeigniter 在解析复杂的 mysql 查询时有点懒惰。

以上是关于查询 CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

Mysql查询详解(条件查询、子查询、模糊查询、连接查询。。。)

嵌套查询与连接查询的区别是啥

数据库查询: 列出表的所有字段,“*”符号,查询指定字段数据,DISTINCT查询,IN查询,BETWEEN AND查询,LIKE模糊查询,对查询结果排序,分组查询,统计分组查询

MySQL查询(简单查询,条件查询,排序查询)

高级查询(嵌套查询)和(相关子查询)