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

How to admin login using two tables data in sql?

我有 3 tables usersrolespermissions

用户table

角色

权限

In users table user1 是 Admin 并且当他的 roleId 在角色 table 中是 13 并且权限中的视图是 1 时他必须登录 table.如何为此编写查询。我尝试了一些方法,但它不起作用

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;
    }

管理员登录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);
    }

使用 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

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