2012-10-30 5 views
0

J'essaie de faire correspondre un "userTypeId" dans la table "users" à son "id" correspondant dans la table "userRoles" afin que je puisse faire écho le "roleName", également dans "userRoles".Qu'est-ce qui ne va pas avec ce JOIN?

Voici les tableaux:

userRoles 
--------------------- 
id roleName 
1 superuser 
2 admin 
3 editor 
4 author 
5 contributor 
6 subscriber 

users 
--------------------- 
id userName  userTypeId 
1 heyjohnmurray 1 
2 admin   2 

J'ai essayé cette requête et chaque fois que je vérifie, il fait écho à "WRONG"

$roleQuery = "SELECT id, roleName, userTypeId FROM userRoles JOIN users ON id=userTypeId"; 
$roleResult = mysqli_query($dbconnect, $roleQuery); 

if(!$roleResult){ 
    echo 'WRONG'; 
} else { 
    echo 'RIGHT'; 
} 

Répondre

2

ajouter une ALIAS sur les tables,

SELECT a.id, a.roleName, b.userTypeId 
FROM userRoles a, users b 
WHERE a.id = b.userTypeId 

ou mieux utiliser le format (ANSI SQL-92)

SELECT a.id, a.roleName, b.userTypeId 
FROM userRoles a 
     INNER JOIN users b 
      ON a.id = b.userTypeId 
+1

alors même si je ne sélectionne pas intentionnellement l'identifiant dans "users" j'ai encore besoin de l'alias pour clarifier que je suis seulement intéressé par l'id "userRoles" et non l'id "users"? – heyjohnmurray

+0

en fait la raison principale est que vous avez une collision de nom, je recommande d'utiliser l'alias afin que vous puissiez spécifier le nom de la colonne avec l'alias de la table. Quoi qu'il en soit, l'alias est facultatif, vous pouvez toujours utiliser le nom de table complet 'userRoles.id = users.userTypeId' –

+1

merci beaucoup de répondre à cette question d'un débutant. c'est grandement apprécié. – heyjohnmurray

1

Vous devez utiliser alias pour les tables d'autre que vous ferez face à une erreur non équivoque sur la requête parce que les deux se joindre à la table a l'id de sorte que le serveur peut contraint à la situation sans ambiguïté pour sélectionner les champs de la table

SELECT UR.id, U.roleName, U.userTypeId FROM userRoles AS UR JOIN users AS U ON UR.id = U.userTypeId 
+0

merci pour l'aide et pour confirmer ce que John Woo a précédemment déclaré. J'apprécie vraiment la réponse. – heyjohnmurray

+0

bienvenue mate :) @heyjohnmurray – gks