sql(mysql)中与旧用户相关的用户列表
我在数据库中有这个表:sql(mysql)中与旧用户相关的用户列表,mysql,codeigniter,activerecord,Mysql,Codeigniter,Activerecord,我在数据库中有这个表: user -id -name -role_id (related to a role-table) 示例数据: name of user1. id=1, role_id = 2, old_userid = 0 name of user2. id=2, role_id = 2, old_userid = 0 name of user3. id=3, role_id = 2, old_userid = 0 name of user4, id=4, role_id = 3,
user
-id
-name
-role_id (related to a role-table)
示例数据:
name of user1. id=1, role_id = 2, old_userid = 0
name of user2. id=2, role_id = 2, old_userid = 0
name of user3. id=3, role_id = 2, old_userid = 0
name of user4, id=4, role_id = 3, old_userid = 2
name of user5, id=5, role_id = 3, old_userid = 2
name of user6, id=6, role_id = 3, old_userid = 4
name of user2[user4, user5] //user4 and user5 has older_userid as 2
name of user6[user4] //user6 has older_userid as 4
通过执行以下操作,我可以获得此旧用户列表:
$this->db->select('u.name')->from('user u');
$this->db->where('u.old_userid >', '0');
它会回来的
name of user4
name of user5
name of user6
但是我想要:
name of user1. id=1, role_id = 2, old_userid = 0
name of user2. id=2, role_id = 2, old_userid = 0
name of user3. id=3, role_id = 2, old_userid = 0
name of user4, id=4, role_id = 3, old_userid = 2
name of user5, id=5, role_id = 3, old_userid = 2
name of user6, id=6, role_id = 3, old_userid = 4
name of user2[user4, user5] //user4 and user5 has older_userid as 2
name of user6[user4] //user6 has older_userid as 4
role\u id=3
与旧用户相同(具有role\u id的用户始终具有旧用户id>0)
我被困在这里了。想想这样的事情:
$this->db->select('u.id, u.name, GROUP_CONCAT(old_userid) AS uid')->from('user u');
$this->db->group_by('u.old_userid');
请帮助某人…-)
我很欣赏纯sql的答案。你可以这样做
$this->db
->select('o.name, GROUP_CONCAT(u.name) AS `old_users`' ,FALSE)
->from('user u')
->join('user o','u.old_userid=o.id','LEFT')
->where('u.role_id',3)
->group_by('u.old_userid')
->get()
;
注意:您需要在select的第二个参数中设置pas FALSE,这样它就不会受到额外的反勾号的影响。非常感谢!:-)