我有3个表users
,roles
和permissions
在users
表中user1
是管理员,当角色表中的roleId为13且权限表中的视图为1时,他必须登录。如何为此编写查询。我尝试了一些东西,但它无法正常工作
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;
}
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);
}
答案 0 :(得分:2)
使用JOINS
代替UNION
。
JOINS
用于定义不同表之间的关系,并根据它们获取数据。
对于你的问题,这将有效。
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