Hướng dẫn mysql nested if - mysql lồng nhau nếu

The folowing sntax seams to be correct. While running on mysql gives error

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 27".

delimiter $$
    create function check2_login(p_username varchar(30),p_password varchar(30),role     varchar(20))
    returns bool
    deterministic 
    begin 
declare loginstatus bool default false;

if role="customer"then 
    select custid from customer where custid=p_username and pwd=p_password;
    if !row_count()=0 then
    select true into loginstatus;
    end if;
else if role="executive"then 
    select execid from executive where execid=p_username and pwd=p_password;
   if !row_count()=0 then
   select true into loginstatus;
    end if;
else if role="admin"then 
    select empid from employee where empid=p_username and pwd=p_password;
    if !row_count()=0 then
    select true into loginstatus;
    end if;
else
   return loginstatus;
end if;
  return loginstatus;
end $$

Hướng dẫn mysql nested if - mysql lồng nhau nếu

fancyPants

49.6k32 gold badges87 silver badges95 bronze badges32 gold badges87 silver badges95 bronze badges

asked Feb 10, 2014 at 11:41Feb 10, 2014 at 11:41

Hướng dẫn mysql nested if - mysql lồng nhau nếu

1

Update your stored function as follows

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;

hope this will help you...!

answered Feb 10, 2014 at 12:38Feb 10, 2014 at 12:38

Hướng dẫn mysql nested if - mysql lồng nhau nếu

Ashish JagtapAshish JagtapAshish Jagtap

2,7893 gold badges28 silver badges44 bronze badges3 gold badges28 silver badges44 bronze badges

3

SELECT *, 
   IF(discount='0',
      ( IF(tax='0', discount_price, discount_price + (discount_price * (tax_rate/100))) ),
      ( IF(tax='0', price, price + (price * (tax_rate/100))) )
   ) AS price_last
FROM products WHERE id=1

answered Jun 22, 2015 at 7:38Jun 22, 2015 at 7:38

Hướng dẫn mysql nested if - mysql lồng nhau nếu

0

I think maybe you should use CASE statement for this procedure

answered Feb 10, 2014 at 11:46Feb 10, 2014 at 11:46

nesnesnes

1,0061 gold badge7 silver badges10 bronze badges1 gold badge7 silver badges10 bronze badges

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm 

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trong 
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2 thông qua cú pháp và ví dụ thực tế.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trả về một giá trị nếu một điều kiện đúng hoặc giá trị khác nếu điều kiện sai.

2. Cú pháp

Cú pháp của hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trong
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2 là:

IF( condition, [value_if_true], [value_if_false] )

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    6: Giá trị mà bạn muốn kiểm tra.
  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    7: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện đúng.
  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    8: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện sai.

Lưu ý:

  • Hàm
    DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    1 có thể trả về một chuỗi hoặc một giá trị số, tùy thuộc vào ngữ cảnh của cách nó được sử dụng.

3. Version

Hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 có thể được sử dụng trong các phiên bản sau của
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23.3

4. Ví dụ

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm 

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trong 
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2 thông qua cú pháp và ví dụ thực tế.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trả về một giá trị nếu một điều kiện đúng hoặc giá trị khác nếu điều kiện sai.

2. Cú pháp

Cú pháp của hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trong
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2 là:

IF( condition, [value_if_true], [value_if_false] )

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    6: Giá trị mà bạn muốn kiểm tra.
  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    7: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện đúng.
  • DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    8: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện sai.

Lưu ý:

  • Hàm
    DELIMITER $$
    DROP FUNCTION IF EXISTS `check2_login`$$
    CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
        BEGIN
        DECLARE retval INT;
                IF role = "customer" THEN
                    SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "executive" THEN
                    SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSEIF role = "admin" THEN
                    SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                    IF retval != 0 THEN
                        RETURN TRUE;    
                    ELSE
                        RETURN FALSE;                           
                    END IF;
                ELSE
                    RETURN FALSE;       
                END IF;
        END$$
    DELIMITER ;
    
    1 có thể trả về một chuỗi hoặc một giá trị số, tùy thuộc vào ngữ cảnh của cách nó được sử dụng.

3. Version

Hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 có thể được sử dụng trong các phiên bản sau của
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23.3

4. Ví dụ

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1

Khi làm việc với Stored Procedure thì bạn không thể thiếu hàm

IF( condition, [value_if_true], [value_if_false] )
3 được vì chúng ta cũng phải kết hợp if với các hàm khác để xử lý các luồng đi trong
IF( condition, [value_if_true], [value_if_false] )
4. Nên trong bài này chúng ta sẽ tìm hiểu mệnh đề if trước rồi sau đó tìm hiểu các phần khác.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm DELIMITER $$ DROP FUNCTION IF EXISTS `check2_login`$$ CREATE FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL BEGIN DECLARE retval INT; IF role = "customer" THEN SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password; IF retval != 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSEIF role = "executive" THEN SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password; IF retval != 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSEIF role = "admin" THEN SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password; IF retval != 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; ELSE RETURN FALSE; END IF; END$$ DELIMITER ; 1 trả về một giá trị nếu một điều kiện đúng hoặc giá trị khác nếu điều kiện sai.

2. Cú phápKhông những chỉ có

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 mà ta có thể sử dụng mệnh đề
IF( condition, [value_if_true], [value_if_false] )
9 trong
IF( condition, [value_if_true], [value_if_false] )
5 cũng được.

Cú pháp của hàm

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
1 trong
DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
2 là:
:

Bài viết này được đăng tại [free tuts .net]

IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;

Luồng đi như sau::

  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    1 đúng thì nó sẽ thực thi câu lệnh bên dưới nó, ngược lại nó bỏ qua và nhảy xuống IFELSE
  • Nó kiểm tra mệnh đề
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    2, nếu mệnh đề này đúng thì nó xử lệnh bên dưới, ngươc lại thì nó bỏ qua và nhảy tiếp xuống dưới.
  • Ở dưới nó nhận thấy chỉ còn có
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    3 nên thực thi luôn chứ không cần kiểm tra điều kiện nữa.

Lưu ý với bạn là ta có thể có nhiều IFELSE chứ không phải chỉ 1 cái như trong ví dụ trên.

2. Ví dụ mềnh đề if else trong MySql Stored Procedure

Bây giờ ta sẽ làm một ví dụ cho bạn dễ hiểu hơn. Trước tiên ta cần tạo một bảng thành viên và insert một số thông tin Username và Password. Bạn chạy lệnh sau để tạo bảng:Trước tiên ta cần tạo một bảng thành viên và insert một số thông tin Username và Password. Bạn chạy lệnh sau để tạo bảng:

CREATE TABLE IF NOT EXISTS `members` (
  `us_id` INT(11) NOT NULL AUTO_INCREMENT,
  `us_username` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `us_password` VARCHAR(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `us_level` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`us_id`)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Contenu de la table `members`
--

INSERT INTO `members` (`us_id`, `us_username`, `us_password`, `us_level`) VALUES
(1, 'admin', '57e34a1be668ebd6e40d430806beb099', 1),
(2, 'member', '57e34a1be668ebd6e40d430806beb099', 2),
(3, 'banded', '57e34a1be668ebd6e40d430806beb099', 0);

Trong bảng này ta cần chú ý đến field

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
4 như sau:

  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    5 => tài khoản bị khóa
  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    6 => admin
  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    7 => member

Bây giờ ta viết Procedure đăng nhập với yêu cầu như sau:

  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    8=> tài khoản bị khóatài khoản bị khóa
  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    9=> là admin
    => là admin
  • Nếu
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    7=> là member
    => là member
  • Nếu không tồn tại => đăng nhập sai => đăng nhập sai

Ý tưởng::

  • Tạo Procedure với tham số truyền vào là gồm
    IF( condition, [value_if_true], [value_if_false] )
    1 và
    IF( condition, [value_if_true], [value_if_false] )
    2 thuộc loại
    IF( condition, [value_if_true], [value_if_false] )
    3, còn
    IF( condition, [value_if_true], [value_if_false] )
    4 thuộc loại
    IF( condition, [value_if_true], [value_if_false] )
    5 để lấy sử dụng. Nếu chưa biết hai khái niệm
    IF( condition, [value_if_true], [value_if_false] )
    3 và
    IF( condition, [value_if_true], [value_if_false] )
    5 vui lòng đọc lại bài tham số trong Procedure.
  • Ta sẽ tạo một biến flag để lưu trữ
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    4 của người dùng, giá trị khởi tạo của nó là
    IF( condition, [value_if_true], [value_if_false] )
    9. Sau khi thực hiện lệnh
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    0 nếu giá trị
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    1 tức là không tồn tại
    IF( condition, [value_if_true], [value_if_false] )
    1 và
    IF( condition, [value_if_true], [value_if_false] )
    2 trong CSDL, ngược lại thì ta sẽ check
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    4 để trả về kết quả tương ứng.

Bài giải::

DELIMITER $$

DROP PROCEDURE IF EXISTS `checkLogin`$$

CREATE PROCEDURE `checkLogin`(
    IN input_username VARCHAR(255),
    IN input_password VARCHAR(255),
    OUT result VARCHAR(255)
)
BEGIN
	/*Bien flag luu tru level. Mac dinh la -1*/
	DECLARE flag INT(11) DEFAULT -1;
	
	/*Thuc hien truy van gan level vao bien flag*/
	SELECT us_level INTO flag FROM members
	WHERE us_username = input_username AND us_password = MD5(input_password);

	/*Sau khi thuc hien lenh select nay ma ko co du lieu thi
	  luc nay flag se khong thay doi. Chinh vi the neu flag = -1 tuc la sai thong tin
	*/
	IF (flag <= 0) THEN
			SET result = 'Thong tin dang nhap sai';
		ELSEIF (flag = 0) THEN
			SET result = 'Tai khoan bi khoa';
		ELSEIF (flag = 1) THEN
			SET result = 'Tai khoan admin';
		ELSE
			SET result = 'Tai khoan member';
	END IF;
END$$

DELIMITER ;

Sử dụng::

DELIMITER $$
DROP FUNCTION IF EXISTS `check2_login`$$
CREATE  FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL
    BEGIN
    DECLARE retval INT;
            IF role = "customer" THEN
                SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "executive" THEN
                SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSEIF role = "admin" THEN
                SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password;
                IF retval != 0 THEN
                    RETURN TRUE;    
                ELSE
                    RETURN FALSE;                           
                END IF;
            ELSE
                RETURN FALSE;       
            END IF;
    END$$
DELIMITER ;
0

Bạn hãy chạy lên và xem thành quả nhé.

Lời kết:

Câu lệnh

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
5 trong MySql thường hay sử dụng trong Stored Procedure chứ ít khi được sử dụng trong câu lệnh
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
0, nếu ở trong
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
0 thì ta thường sử dụng lệnh
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
8 để thay thế. Hy vọng qua bài này bạn sẽ hiểu một chút về lệnh if else trong mysql và là tiền đề để học những bài sau nữa. Chúc bạn học tốt!Stored Procedure chứ ít khi được sử dụng trong câu lệnh
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
0, nếu ở trong
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
0 thì ta thường sử dụng lệnh
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
8 để thay thế. Hy vọng qua bài này bạn sẽ hiểu một chút về lệnh if else trong mysql và là tiền đề để học những bài sau nữa. Chúc bạn học tốt!