2013-04-03 3 views
0

A l'origine, ma requête sql vérifiait si les feuilles de temps/heures supplémentaires étaient en attente de révision par le manager ... maintenant j'ai ajouté des feuilles de temps de garde qui se trouvent sur une table différente ...plusieurs tables pour des requêtes distinctes dans mysql

ma précédente requête SQL qui a fonctionné, mais SANS ONCALL_TABLE $ ...

list($qh, $num) = dbQuery("SELECT manager FROM $USER_TABLE WHERE username IN (SELECT DISTINCT uid FROM $TIMES_TABLE WHERE submitstatus=1 OR ot_status=1)"); 

maintenant im essayant d'ajouter l'attente sur appel à la même feuille de temps requête SQL, mais je continue à avoir des erreurs ... peut-être que quelqu'un peut m'aider à corriger ma syntaxe ?:

list($qh, $num) = dbQuery("SELECT manager FROM $USER_TABLE WHERE username IN (SELECT DISTINCT $TIMES_TABLE.uid, $ONCALL_TABLE.uid FROM $TIMES_TABLE, $ONCALL_TABLE WHERE $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1 OR $ONCALL_TABLE.submitstatus=1)"); 

erreur que je reçois: Impossible d'effectuer une requête: Opérande doit contenir 1 colonne (s)

+0

Quelles sont les erreurs? Cela aiderait beaucoup_. – Infiltrator

+0

désolé j'ai oublié l'erreur .. je l'ai ajouté à la poste maintenant. – rubberchicken

+0

pouvez-vous indiquer quelles sont les tables impliquées? Quelle est la relation entre chaque table? –

Répondre

2

Le problème est dans la sous-requête, mais je le manipuler à l'aide d'un union all:

SELECT manager 
FROM $USER_TABLE 
WHERE username IN (SELECT uid 
        from (select $TIMES_TABLE.uid 
         from $TIMES_TABLE 
         where $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1 
         union all 
         select $ONCALL_TABLE.uid 
         from $ONCALL_TABLE 
         where $ONCALL_TABLE.submitstatus=1 
         ) t 
        ) 

Pour être honnête, cependant, le union all peut interférer avec l'utilisation des index. Cela pourrait fonctionner mieux:

SELECT manager 
FROM $USER_TABLE 
WHERE username IN (select $TIMES_TABLE.uid 
        from $TIMES_TABLE 
        where $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1 
       ) or 
     username in (select $ONCALL_TABLE.uid 
        from $ONCALL_TABLE 
        where $ONCALL_TABLE.submitstatus=1 
       ) 
+0

oui j'ai utilisé le second que vous avez posté et ça marche! merci Gordon et Infiltrator pour toute l'aide! – rubberchicken

Questions connexes