将MySql中的表与一个公共字段连接,但公共字段的值不同

时间:2012-01-21 19:11:18

标签: php mysql

如何使用一个公共字段(如

)连接3个表
  • 表1:C_ID,用户名,密码,c_role
  • 表2:P_ID,用户名,密码,c_role
  • 表3:S_ID,用户名,密码,c_role
c_role 字段中的

很常见 在这里我分配了

  • 在table1
  • 中为c_role枚举'1'
  • 表2中c_role的枚举'2'
  • 在表3中为c_role枚举'3'

为3个不同的用户提供权利,例如corres,校长和工作人员登录时的权利。 现在,当他们登录时,应该识别用户并将他们带到他们的页面..

3 个答案:

答案 0 :(得分:1)

唯一的连接是用户名(和密码?),除非c_id,p_id和s_id都是相同的ID?

你不能加入角色看见,因为它们在每个表中是不同的,除了完全愚蠢的角色​​=表1中的1相当于table2中的role = 2.

你是说工会吗?如你所愿

User Password Role
Fred Fr3d     1
Fred ???      2
Fred ???      3

不确定您使用此架构尝试实现的目标,但它在书中的每个规则附近都有所突破,并且似乎无法满足您的需求....

根据您的评论,您可能会看到一种方式。

Users (UserID, UserName, Password etc) Key UserID
Roles (RoleID, RoleName etc) Key RoleID
UserRoles(UserID,RoleID) Key UserID,RoleID

你需要学习一些关于数据库特别是规范化的知识,前三种形式应该适用于大多数事情。

然后

Select UserName, Password,RoleName From Users 
inner join UserRoles on Users.UserID = UserRoles.UserID
inner join Roles on UserRoles.RoleID = Roles.RoleId

等等变得可能和有效。

答案 1 :(得分:1)

您应该有一个包含以下列的表:

id(唯一,主要),用户名,密码,角色(INT,将根据用户为主,工作人员或相关人员分配1-3)

另外

如果您想要这样设置,可以使用另一个名为roles的表:

id(唯一的,主要的),标题(标题的选项将是委托人,职员或者对应的)

当用户登录时,只需执行类似

的操作
if($role == 1){
// redirect to principal page
}
elseif($role == 2){
// redirect to staff page
}
elseif($role == 3){
// redirect to corres page
}

我不确定,但我相信这也会有效。试试这个查询。

(SELECT '1' AS role FROM table1 WHERE username = $username AND password = $password)
UNION ALL
(SELECT '2' AS role FROM table2 WHERE username = $username AND password = $password)
UNION ALL
(SELECT '3' AS role FROM table3 WHERE username = $username AND password = $password)

假设用户只位于这三个表中的一个表中,那么它应该与用户名和密码匹配,并找出用户来自哪个表。然后你可以使用

取出角色
$role = $row['role'];

如果用户名/密码组合不正确,则$ role将为空,或者您可以获取行数[使用$ iscorrectuser = mysql_num_rows($ query)],其中匹配且行数为0。然后,您可以重定向尝试使用“不成功登录”错误消息登录的用户。

答案 2 :(得分:0)

会话和包含函数:

 session_start();
 include("config.php"); 
 if(isset($_POST['T_UserName']) && isset($_POST['T_Password']) &&         !empty($_POST['T_UserName']) && !empty($_POST['T_Password']))
 {

从表单发送的用户名和密码:

 $T_UserName=$_POST['T_UserName'];
 $T_Password=$_POST['T_Password'];

保护MySQL注入:

 $T_UserName = stripslashes($T_UserName);
 $T_Password = stripslashes($T_Password);
 $T_UserName= mysql_real_escape_string($T_UserName);
 $T_Password = mysql_real_escape_string($T_Password); 

  $sql="SELECT * FROM login WHERE username='$T_UserName' and password='$T_Password'";     $result=mysql_query($sql);

Mysql_num_row正在计算表格行:

  $count=mysql_num_rows($result);

如果结果与$ T_UserName和$ T_Password匹配,则表行必须为1行:

  if($count==1)
        { 

注册$ T_UserName,$ T_Password并重定向到文件“correspindex.php”:

         session_register("T_UserName");
         session_register("T_Password");

重定向到错误页面或显示错误消息:

         if(isset($_POST['emp_role'])
              { 
                $userinfo = mysql_fetch_assoc($sql);
                $emp_role = $userinfo['emp_role'];
         if($emp_role == 1)
            { 
               header("location:corrrespondindex.php"); 
            } 
              elseif($emp_role == 2 )
               {
               header("location:principalindex.php");
               } 
                elseif($emp_role == 3)
                {
               header("location:staffindex.php");
                } 
           closes out if the user DOES exist:

                header("location:loginhome.php"); 
                 } 
                else
                 { 
                 echo "Wrong Username or Password"; 
                 }
                }
             } 
 php is closed

       this is the php code im getting so many error
       i create 1table with id,username,password and role(ENUM,values as'1','2','3' –
       any else shud i do in the code???