2016-04-09 71 views
0

我想使用连接来获取两列,下面的查询工作正常,现在我怎么可以比较这两个值使用if语句。如何比较mysql存储过程中的两列值

SELECT 
    failed = L.failed_attempts AS 'FAILED ATTEMPTS', 
    s_value = s.setting_value as 'SETTING VALUE' 
FROM login_t L 
INNER JOIN settings_t S ON S.SETTING_NAME = 'login_attempts' 
WHERE L.login_id = id 
    AND L.failed_attempts > S.setting_value; 

如果failed_attempts > settings_value然后在login_tis_logged_in列的值更新为0,返回false,否则返回true

PS:我使用MySQL的存储过程

+0

您的查询工作单引用别名? –

+0

是它的工作正常 –

+0

而这个查询总是返回一行? –

回答

0

如果你的select语句百达retuns恰好一行,您可以存储选定的值INTO局部变量,您应该首先使用DECALRE。然后您可以使用IF .. THEN .. ELSE .. END IF;:返回您只需要的东西SELECT someValue。 我不知道应该比较什么。但是,这是这样的,你可以做到这一点:

DECLARE FAILED_ATTEMPTS INT; 
DECLARE SETTING_VALUE INT; 

SELECT 
    failed = L.failed_attempts, 
    s_value = s.setting_value 
INTO 
    FAILED_ATTEMPTS, 
    SETTING_VALUE 
FROM login_t L 
INNER JOIN settings_t S ON S.SETTING_NAME = 'login_attempts' 
WHERE L.login_id = id 
    AND L.failed_attempts > S.setting_value; 

IF FAILED_ATTEMPTS > SETTING_VALUE 
THEN 
    -- your update statement here 
    SELECT FALSE; 
ELSE 
    SELECT TRUE; 
END IF; 

也许你需要

SELECT 
    L.failed_attempts, 
    s.setting_value 
INTO 
    FAILED_ATTEMPTS, 
    SETTING_VALUE 

但不知何故,我猜你需要两个SELECT语句:

SELECT L.failed_attempts, 
INTO FAILED_ATTEMPTS 
FROM login_t L 
WHERE L.login_id = id; 

SELECT s.setting_value 
INTO SETTING_VALUE 
FROM settings_t S 
WHERE S.SETTING_NAME = 'login_attempts'; 
+0

谢谢,它的工作正常 –