2012-07-18 11 views
3

J'ai un problème simple concernant une requête imbriquée. Pour être honnête, je ne sais pas si cela peut être fait à travers une seule requête ou si je vais devoir utiliser PHP.Requête mysql imbriquée avec double instruction select?

En d'autres termes, je souhaite renvoyer les informations sur les utilisateurs à partir des tables des utilisateurs par les ID d'utilisateurs renvoyés à partir d'une instruction select dans la table des relations.

Je peux le faire par 2 requêtes et une boucle PHP, mais pour économiser des ressources, mais je pense qu'il est préférable de le combiner en 1 requête et en boucle unique.

Première requête

SELECT UserID FROM relations WHERE GroupID = '1' 

de la seconde requête que je dois récupérer les informations utilisateur à partir de la table utilisateur par les UsersIDs retour de la première instruction select.

Je peux le faire en passant par l'ID et en faisant les requêtes mais je pense que je peux obtenir toutes les requêtes.

Merci

+0

Vous pouvez utiliser INNER JOIN? –

+0

Vous devez utiliser MYSQL JOINS pour votre besoin. Merci! –

Répondre

5

C'est la façon typique de le faire:

SELECT  users.* 
FROM  users 
INNER JOIN relations 
ON   users.id = relations.userid 
WHERE  relations.groupid = 1 

Je remarque que vous utilisiez des guillemets autour de 1 dans votre requête. Je suppose que l'identifiant de groupe est une valeur entière, auquel cas vous ne devriez pas utiliser de guillemets.

Les réponses qui utilisent une sous-requête IN sont susceptibles d'être moins performantes. Esp. avec MySQL, le JOIN devrait toujours être la manière préférée de combiner les résultats des tables, puisque MySQL a une implémentation de sous-requête particulièrement terne.

2
select * from user_typw 
where userID in (SELECT UserID FROM relations WHERE GroupID = '1') 
3
Select * from user_table where id in(SELECT UserID FROM relations WHERE GroupID = '1') 
            OR 
Select * from user_table u INNER JOIN relations r ON u.UserID=r.UserID WHERE r.GroupID='1' 
1

essayer

select * from user where UserID in 
(SELECT UserID FROM relations WHERE GroupID = '1') 

ou

select * from user U where exists 
(SELECT * FROM relations R WHERE U.UserID=R.UserID and R.GroupID = '1') 

ou

select U.* 
from user U join relations R 
on U.UserID=R.UserID 
where R.GroupID = '1' 
0
SELECT * FROM user_table ut LEFT JOIN relations r on ut.UserID=r.UserID where r.GroupID=1; 
0

SELECT A.field1, B.field2 FROM table1 LEFT JOIN table2 B = ON A.common_ID B.common_ID où le champ = 'abc'

Questions connexes