用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1742|回复: 4
收起左侧

[HELP] 【求助】SQL语句,求大神帮忙转换为Active Record

[复制链接]
发表于 2015-7-13 11:29:23 | 显示全部楼层 |阅读模式


SQL 语句如下,自己一直没做好,求大神帮忙转换成Active Record格式,万分感谢:

select * from (select user.*,ifnull(admin_member.role,0) as role,admin_member.id as aid from user left join admin_member on admin_member.user_id = user.id) as ut where ut.username LIKE '%%' and ut.role=1 ORDER BY ut.role desc,ut.id asc  limit 0,5
 楼主| 发表于 2015-7-13 11:30:18 | 显示全部楼层
自己顶一个
 楼主| 发表于 2015-7-13 13:22:10 | 显示全部楼层
自己顶一个
发表于 2015-7-13 15:31:57 | 显示全部楼层
本帖最后由 aneasystone 于 2015-7-13 15:40 编辑

首先,你没有必要使用内联视图子查询,另外WHERE条件中的 ut.username LIKE '%%' 似乎也没有意义。所以你的SQL可以简化成下面这样:

SQL复制代码
 
SELECT
        u.*,
        IFNULL(am.`role`, 0) `role`,
        am.id aid
FROM `user` u
LEFT JOIN admin_member am
ON am.user_id = u.id
WHERE am.`role` = 1
ORDER BY am.`role` DESC, u.id ASC
LIMIT 0,5
 
复制代码


这样SQL就是一个简单的JOIN语句,可以采用类似于下面的AR代码(手工打的,没测试):

PHP复制代码
 
$this->db->select('*');
$this->db->from('user');
$this->db->join('admin_member', 'admin_member.user_id = user.id');
$this->db->where('role', 1);
$this->db->order_by('role desc, id asc');
$this->db->limit(5);
$query = $this->db->get();
复制代码







 楼主| 发表于 2015-7-13 17:40:11 | 显示全部楼层
aneasystone 发表于 2015-7-13 15:31
首先,你没有必要使用内联视图子查询,另外WHERE条件中的 ut.username LIKE '%%' 似乎也没有意义。所以你的 ...

不好意思,我忘了说明具体情况了,{:soso_e106:}

1. role 字段只存在于admin_member;
2.admin_member只存储role=1的元素,表内并无role = 0的元素

你写的这种方法我最初的时候用过,用where无法进行有效过滤,所以,我写了子查询。。。

{:soso_e113:}

还好,目前问题已经解决了,我在函数内部对sql语句进行了组装,没有使用Active Record了

本版积分规则