sql >> Base de Datos >  >> RDS >> Mysql

Unir tablas en MySql con un campo común pero diferentes valores para el campo común

Debe tener una tabla que contenga las siguientes columnas:

id (único, principal), nombre de usuario, contraseña, rol (INT, se le asignaría 1-3 para principal, personal o corre según el usuario)

Además

Podría tener otra tabla llamada roles si desea configurarla de esta manera:

id (único, principal), título (las opciones de título serían director, personal o corresponsal)

Cuando el usuario inicie sesión simplemente haga algo como

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

No estoy seguro, pero creo que esto también funcionaría. Prueba esta consulta.

(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)

Suponiendo que el usuario solo se encuentra en UNA de esas tres tablas, debe coincidir con el nombre de usuario y la contraseña y averiguar de qué tabla proviene el usuario. Luego puede extraer el rol usando

$role = $row['role'];

Si la combinación de nombre de usuario/contraseña es incorrecta, entonces $role estaría vacío o podría buscar el número de filas [usando $iscorrectuser =mysql_num_rows($query)] donde hay una coincidencia y el número de filas sería 0. Entonces podría redirigir al usuario que intenta iniciar sesión con un mensaje de error "Inicio de sesión fallido".