2013-05-28 3 views
0

J'essaie d'effectuer ce que je suppose être une requête très simple sur une base de données MySQL. Voici ma configuration de table;sélectionner des valeurs de plusieurs tables où valeur = X

Tableau 1 - CMS_AccessLevels

  • AccessLevel
  • titlecolor

Tableau 2 - CMS_Users

  • utilisateurID
  • nom d'utilisateur
  • USEREMAIL
  • useravatar
  • userSignature
  • ACCESSLEVEL

J'ai déjà cette requête;

SELECT `titleColor` FROM `CMS_AccessLevels` WHERE `accessLevel` = (SELECT `accessLevel` FROM `CMS_Users` WHERE `userID` = 3) 

Cela fonctionne correctement et renvoie la valeur titleColor correcte basée sur la mise en correspondance accessLevel entre les deux tables.

Maintenant, ce que je veux faire est aussi de saisir certaines des valeurs de CMS_Users. Par souci de simplicité, supposons que je veuille saisir seulement quelques-unes des valeurs, mon ensemble de résultats pourrait ressembler à ceci;

userID|username|userAvatar|accessLevel|titleColor 
------------------------------------------------- 
0  |Scott |image.png | 6   |#FFFFFF 

ou comme un tableau PHP (montré juste pour que vous pouvez voir la disposition logique si le tableau ci-dessus n'a pas de sens);

array('userID' => $result['userID'], 
     'username' => $result['username'], 
     'userAvatar' => $result['userAvatar'], 
     'accessLevel' => $result['accessLevel'], 
     'titleColor' => $result['titleColor']; 

Disons que je veux userID, userName, userAvatar et accessLevel de CMS_Users et titleColor de CMS_AccessLevelsCMS_Users.userID est égal à '3', se souvenant que CMS_AccessLevels.accessLevel et CMS_Users.accessLevelMUST correspondance.

De manière réaliste, la seule donnée que je connaisse avant d'exécuter la requête est userID.

Est-il possible de le faire avec une seule requête?

Répondre

1

Essayez ceci:

SELECT u.userID, u.username, u.userAvatar, u.accessLevel, al.titleColor 
FROM CMS_AccessLevels al 
INNER JOIN CMS_Users u 
ON u.accessLevel = al.accessLevel 
WHERE u.userID = 3 
+0

Parfait! Merci :) –

+0

Vous êtes les bienvenus :) – sarwar026

1

Vous utilisez des sous-requêtes alors que les jointures seront le bon choix. Vous pouvez essayer quelque chose comme

SELECT a.titleColor AS titleColor, u.username AS username FROM CMS_users u INNER JOIN CMS_AccessLevels a ON u.accessLevel = a.accessLevel WHERE u.userID = '3' 
Questions connexes