如何在sql中使用两个表数据进行管理登录?

时间:2017-02-10 06:21:11

标签: php mysql codeigniter-3

我有3个表usersrolespermissions

用户表

users

角色

roles

权限

permissions

users表中user1是管理员,当角色表中的roleId为13且权限表中的视图为1时,他必须登录。如何为此编写查询。我尝试了一些东西,但它无法正常工作

Adminmodel.php

public function auth($data){
        $sql="SELECT * FROM users
                WHERE email='". $data['email'] . "'
                AND password='". $data['password']."'
                AND roleId=13
                UNION
                SELECT roleId FROM permissions 
                WHERE view=1" ;
                ;

        $query=$this->db->query($sql);
        return $query;
    }

Adminlogin controller.php

public function auth(){
        $username=$this->input->post("username");
        $password=md5($this->input->post('password'));
        $data['email']=$username;
        $data['password']=$password;
        $q=$this->Adminmodel->auth($data);
        $result=0;
        $status=0;
        if($q->num_rows()>0){
            $result=$q->row()->status==0?-1:1;
            if($result==1){
                $admindata=array(
                        'cp_adminid'=>$q->row()->userId,
                        'cp_roleid'=>$q->row()->roleId
                );
                $this->session->set_userdata($admindata);
                if (!is_dir('private/'.$q->row()->userId)) {
                    $oldmask = umask(0);
                    $q=mkdir('private/' .$q->row()->userId,0777,true);
                    umask($oldmask);
                    copy('public/images/default_user.png','private/'.$q->row()->userId.'/default-profile_pic.png');
                }
                }else{

                }

                //$msg="error occured";
            }

        $data['result']=$result;
        //$res=$this->load->view("user/userhome",$data,true);
        $value=array(
                'result'=>$result,

        );
        echo json_encode($value);
    }

1 个答案:

答案 0 :(得分:2)

使用JOINS代替UNIONJOINS用于定义不同表之间的关系,并根据它们获取数据。

对于你的问题,这将有效。

SELECT * FROM users u
JOIN roles r ON r.roleId = u.roleId
JOIN permissions p ON p.roleId = r.roleId
WHERE email='". $data['email'] . "'
AND password='". $data['password']."'
AND r.roleId=13
AND p.view=1

另请参阅此链接以了解MYSQL JOINS的基础知识:http://www.w3schools.com/sql/sql_join.asp