2010-11-07 8 views
0

Ceci est mon SProcedureComment puis-je retourner un seul jeu d'enregistrements à partir de plusieurs sélection d'une procédure stockée dans MySQL?

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `etracking`.`validarAcceso` $$ 
CREATE PROCEDURE `etracking`.`validarAcceso` (IN pusuario VARCHAR(30),IN ppassword VARCHAR(10)) 
BEGIN 

    DECLARE encontrado INT; 
    SET encontrado = 0; 
IF encontrado = 0 THEN 
    SELECT usuarios_distribuidores.nombre, usuarios_distribuidores.apellido1, 
    usuarios_distribuidores.apellido2, distribuidores.nombre, count(encontrado) FROM 
    usuarios_distribuidores INNER JOIN distribuidores ON 
    distribuidores.iddistribuidor = usuarios_distribuidores.iddistribuidor 
    WHERE email = pusuario AND password = ppassword; 
END IF; 

IF encontrado = 0 THEN 
    SELECT * FROM usuarios_centro_acopio WHERE email = pusuario AND password = ppassword; 

END IF; 

IF encontrado = 0 THEN 
    SELECT * FROM usuarios_admin WHERE email = pusuario AND password = ppassword; 
END IF; 

END $$ 

DELIMITER ; 
+0

Il ne sert à 'encontrado' si elle n'a jamais mis à jour. –

Répondre

0

Il y a 2 options. Vous pouvez utiliser une union ou une jointure. Cela dépend de votre structure.

SELECT * FROM usuarios_centro_acopio WHERE email = pusuario AND password = ppassword 
UNION ALL 
SELECT * FROM usuarios_admin WHERE email = pusuario AND password = ppassword; 

ou

SELECT * FROM usuarios_centro_acopio c, usuarios_admin a WHERE c.email = a.email and cpassword = a.password and email = pusuario AND password = ppassword 
1

Mettez les requêtes dans le même état, de sorte que vous pouvez utiliser union all:

IF encontrado = 0 THEN 

    SELECT usuarios_distribuidores.nombre, usuarios_distribuidores.apellido1, 
    usuarios_distribuidores.apellido2, distribuidores.nombre, count(encontrado) FROM 
    usuarios_distribuidores INNER JOIN distribuidores ON 
    distribuidores.iddistribuidor = usuarios_distribuidores.iddistribuidor 
    WHERE email = pusuario AND password = ppassword; 

    UNION ALL 

    SELECT * FROM usuarios_centro_acopio WHERE email = pusuario AND password = ppassword; 

    UNION ALL 

    SELECT * FROM usuarios_admin WHERE email = pusuario AND password = ppassword; 

END IF; 
+0

Les types de données de colonne doivent correspondre à chaque position dans la clause SELECT pour que cela fonctionne. C'est difficile à déterminer quand deux requêtes utilisent la notation 'SELECT *' ... –

+0

@OMG Poneys: Bon point. Il ne devrait bien sûr y avoir aucune requête qui ne spécifie pas quels champs retourner dans une requête de production ... – Guffa

+0

Salut merci beaucoup mais vous me dites de regrouper les requêtes en un, mais je dois obtenir le recorset d'un seul select selon le si je mets ci-dessus ... par exemple si la première sélection obtient l'enregistrement l'autre sélectionne retourne null jeu d'enregistrements, alors comment je devrais faire si je ne veux pas voir ces autres jeux d'enregistrements nuls ... – Alejandro

Questions connexes