La sélection entre plusieurs tables avec l'UNION

J'ai retravaillé ma base de données à partir d'un tableau d'utilisateur à utilisateur plusieurs tables (divisé par rôle): tblStudents, tblTeachers, tblAdmin

Lors de la connexion, je ne voulais pas courir trois requêtes pour vérifier si l'utilisateur existe, quelque part dans ma DB. Donc ce que j'ai fait a été de mettre ensemble la requête suivante avec union

select s.id as id, s.email as email, s.password as password, s.role as role from tblStudents s
union
select a.id as id, a.email as email, a.password as password, a.role as role from tblAdmin a
union
select t.id as id, t.email as email, t.password as password, t.role as role from tblTeachers t

Cela permet de sélectionner les champs qui sont les mêmes dans toutes les tables et les sorties les résultats bien pour moi.

Alors, j'ai décidé d'essayer cela et pour une raison quelconque, mon formulaire de connexion ne fonctionne pas. Pour mon formulaire de connexion, j'ai ajouté un where clause qui vérifie l'adresse e-mail. J'ai couru à la requête dans ma base de données application et étonnamment, quand je fais par exemple where email = "[email protected]" (cet email existe dans ma base de données tblAdmin), il sélectionne un enregistrement de mes élèves de table.

Avec la clause where:

select s.id as id, s.email as email, s.password as password, s.role as role from tblStudents s
union
select a.id as id, a.email as email, a.password as password, a.role as role from tblAdmin a
union
select t.id as id, t.email as email, t.password as password, t.role as role from tblTeachers t
where email = "[email protected]"

Les enregistrements à la fois have id = 1 mais je ne comprends pas pourquoi il faudrait choisir le dossier de l'élève quand je suis filtrage sur l'admin adresse e-mail. Pourquoi est-ce? Quelqu'un peut m'expliquer et me donner une meilleure solution à ce problème? En fait j'ai un formulaire de connexion et la nécessité de sélectionner entre plusieurs tables pour vérifier si l'utilisateur existe dans ma db.

Qui ne semble pas être votre requête complète, comme il n'y a pas de filtrage. Vous pouvez poster la totalité de la requête?
Pensais que ce serait plus clair; mis à jour avec une autre requête 🙂
Je remarque que vous ne mettez pas la chaîne de caractères entre guillemets. C'est qu'une faute de frappe?
Si vous voulez dire que l'e-mail = un, ya, je l'ai oublié là; édité.
Sur un sujet connexe; essayez d'éviter d'utiliser "", pour citer vos chaînes. MySQL ne permettent malheureusement, mais si jamais vous avez à migrer vers une autre base de données, il crachera le mannequin à vous. À l'aide de " au lieu de cela est la norme SQL et MySQL et tout le reste.

OriginalL'auteur cabaret | 2011-05-20