Mysql
 sql >> Base de données >  >> RDS >> Mysql

Joindre des tables dans MySql avec un champ commun mais des valeurs différentes pour le champ commun

Vous devriez avoir un tableau contenant les colonnes suivantes :

identifiant (unique, principal), nom d'utilisateur, mot de passe, rôle (INT, serait attribué 1-3 pour le principal, le personnel ou corre selon l'utilisateur)

De plus

Vous pourriez avoir une autre table appelée rôles si vous voulez configurer comme ceci :

id (unique, principal), titre (les options pour le titre seraient principal, staff ou corres)

Lorsque l'utilisateur se connecte, faites quelque chose comme

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

Je ne suis pas certain mais je pense que cela fonctionnerait aussi. Essayez cette requête.

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

En supposant que l'utilisateur ne se trouve que dans UNE de ces trois tables, il doit correspondre au nom d'utilisateur et au mot de passe et découvrir de quelle table provient l'utilisateur. Ensuite, vous pouvez retirer le rôle en utilisant

$role = $row['role'];

Si la combinaison nom d'utilisateur/mot de passe est incorrecte, alors $role serait vide ou vous pourriez récupérer le nombre de lignes [using $iscorrectuser =mysql_num_rows($query)] où il y a une correspondance et le nombre de lignes serait 0. Vous pourriez alors rediriger l'utilisateur essayant de se connecter avec un message d'erreur "Connexion infructueuse".