Объединение таблиц в MySql с одним общим полем, но разными значениями для общего поля

как присоединиться к 3 таблицам с одним общим полем

  • table1: c_id, имя пользователя, пароль, c_role
  • table2: P_ID, имя пользователя, пароль, c_role
  • Таблица3: s_id, имя пользователя, пароль, c_role

в этом поле c_role распространено здесь, которое я назначил

  • enum '1' для c_role в таблице 1
  • enum '2' для c_role в таблице 2
  • enum '3' для c_role в таблице 3

за предоставление прав на 3 разных пользователя, таких как corres, main и для персонала при входе в систему. Теперь, когда они заходят в систему, он должен идентифицировать пользователя и отнести их на свою страницу.

У вас должна быть одна таблица, содержащая следующие столбцы:

id (уникальный, первичный), имя пользователя, пароль, роль (INT, будет назначаться 1-3 для принципала, персонала или соответствия в зависимости от пользователя)

Дополнительно

У вас может быть другая таблица, называемая ролями, если вы хотите настроить ее следующим образом:

id (уникальный, первичный), title (опции для названия будут основными, персональными или соответствующими)

Когда пользователь входит в систему, просто делайте что-то вроде

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. Тогда вы могли бы перенаправить пользователя, пытающегося войти в систему с сообщением об ошибке «Неудачный вход».

Единственное объединение будет на имя пользователя (и пароль?), Если c_id, p_id и s_id не будут одинаковыми?

Вы не можете присоединяться к просмотру роли, поскольку они различны в каждой таблице, за исключением совершенно тупой роли = 1 в таблице 1 является эквивалент role = 2 в таблице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 

и такие, которые становятся возможными и эффективными.

сессии и включают функции:

  session_start(); include("config.php"); if(isset($_POST['T_UserName']) && isset($_POST['T_Password']) && !empty($_POST['T_UserName']) && !empty($_POST['T_Password'])) { в  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???