2010-11-07 114 views
0

這是我SProcedure如何從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

有沒有點'encontrado'如果它永遠不會更新。 – 2010-11-07 19:26:20

回答

0

有2個選項。您可以使用聯合或聯接。這取決於你的結構。

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

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

把查詢在相同的條件下,這樣就可以使用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

列數據類型需要在SELECT子句中的每個位置匹配才能工作。這很難確定何時兩個查詢使用'SELECT *'符號... – 2010-11-07 19:34:50

+0

@OMG小馬:好點。當然應該沒有任何查詢沒有指定在生產查詢中返回哪些字段... – Guffa 2010-11-07 19:55:51

+0

你好,非常感謝,但你告訴我在一個查詢組中,但我需要得到只有一個選擇的recorset取決於如果我把上面...例如,如果第一個選擇獲取記錄其他選擇返回空記錄集,所以我應該怎麼做,如果我不想看到其他空記錄集... – Alejandro 2010-11-07 20:07:38

相關問題