2017-10-19 25 views
0
---------------------------- 
| user | path | active | 
---------------------------- 
| user A | A.1  | 0 | 
---------------------------- 
| user B | A.1.1 | 1 | 
---------------------------- 
| user C | A.1.1.1 | 1 | 
---------------------------- 

conditions:imbriqué select opérandes mysql devrait contenir 1 colonnes

chemin

est comme un arbre utilisateur. l'utilisateur B est l'enfant de l'utilisateur A et l'utilisateur C est l'enfant de l'utilisateur B. si actif = 0 cela signifie que l'utilisateur n'est pas actif.

J'ai besoin de sélectionner par chemin l'enfant de l'utilisateur A qui est actif et qui a aussi un enfant.

pour l'instant je l'ai déjà une requête pour sélectionner l'enfant de l'utilisateur A

select path from table where active = 1 and `path` like 'A.1%' and 
length(`path`) - length(replace(`path`, '.', '')) = 2; 

il retournera tous les Childs de l'utilisateur A.

i besoin en ce moment pour sélectionner l'enfant de l'utilisateur A qui avoir aussi un enfant.

i essayé à l'utilisateur imbriqué select comme celui-ci

select distinct path from table where active = 1 and user_type = 1 and `path` like ((select path from acctProgress_monthly where active = 1 and user_type = 1 and `path` like 'A.1%' and 
length(`path`) - length(replace(`path`, '.', '')) = 2), '%'); 

mais il renvoie l'erreur "opérande doit contenir 1 colonne"

quelqu'un peut me aider à ce problème

merci beaucoup

Répondre

0

Dans mysql lorsque vous souhaitez utiliser SELECT imbriqué, il DOIT retourner 1 valeur.

Imaginez la table myNames être comme:

id | nom

1 | John

2 | Anne

Si vous

SELECT * FROM myTable WHERE name = (SELECT name FROM myNames);

jetteront cette erreur, car (SELECT name FROM myNames) retourneraient plusieurs lignes.

Pour résoudre ce problème, vous devez retourner seulement 1 ligne et 1 colonne (1 valeur):

SELECT * FROM myTable WHERE name = (SELECT name FROM myNames WHERE id = 1);