Mysql
 sql >> Database >  >> RDS >> Mysql

Unire tabelle in MySql con un campo comune ma valori diversi per il campo comune

Dovresti avere una tabella che contenga le seguenti colonne:

id (univoco, primario), nome utente, password, ruolo (INT, verrebbe assegnato 1-3 per principale, staff o corre a seconda dell'utente)

Inoltre

Potresti avere un'altra tabella chiamata ruoli se vuoi configurarla in questo modo:

id (univoco, primario), titolo (le opzioni per il titolo sarebbero principal, staff o corres)

Quando l'utente effettua l'accesso, fai qualcosa come

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

Non ne sono sicuro, ma credo che funzionerebbe anche questo. Prova questa query.

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

Supponendo che l'utente si trovi solo in UNA di queste tre tabelle, dovrebbe corrispondere al nome utente e alla password e scoprire da quale tabella proviene l'utente. Quindi puoi estrarre il ruolo utilizzando

$role = $row['role'];

Se la combinazione nome utente/password non è corretta, $role sarebbe vuoto oppure potresti recuperare il numero di righe [usando $iscorrectuser =mysql_num_rows($query)] dove c'è una corrispondenza e il numero di righe sarebbe 0. Potresti quindi reindirizza l'utente che tenta di accedere con un messaggio di errore "Accesso non riuscito".