sql >> Databasteknik >  >> RDS >> Mysql

Sammanfoga tabeller i MySql med ett gemensamt fält men olika värden för det gemensamma fältet

Du bör ha en tabell som innehåller följande kolumner:

id (unik, primär), användarnamn, lösenord, roll (INT, skulle tilldelas 1-3 för rektor, personal eller motsvarande beroende på användaren)

Dessutom

Du kan ha en annan tabell som heter roller om du vill ställa in så här:

id (unik, primär), titel (alternativ för titel skulle vara rektor, personal eller corres)

När användaren loggar in gör bara något liknande

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

Jag är inte säker men jag tror att detta skulle fungera också. Testa den här frågan.

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

Förutsatt att användaren bara finns i EN av dessa tre tabeller så bör den matcha användarnamnet och lösenordet och ta reda på vilken tabell användaren kommer ifrån. Sedan kan du dra ut rollen genom att använda

$role = $row['role'];

Om kombinationen av användarnamn/lösenord är felaktig är $role tom eller så kan du hämta antalet rader [med $iscorrectuser =mysql_num_rows($query)] där det finns en matchning och antalet rader skulle vara 0. Du kan då omdirigera användaren som försöker logga in med ett felmeddelande om misslyckad inloggning.



  1. Hur kan jag undvika hakparenteser i en LIKE-sats?

  2. Ingen anslutning kunde göras eftersom målmaskinen aktivt vägrade det (PHP / WAMP)

  3. sql gruppera endast efter rader som är i sekvens

  4. generera enum-klass från tabell med JOOQ