Trong bài này mình sẽ hướng dẫn cách sử dụng hàm IF
trong MySQL
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.
1. Mô tả
Hàm IF
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 IF
trong MySQL
là:
IF[ condition, [value_if_true], [value_if_false] ]
Trong đó:
Bài viết này được đăng tại [free tuts .net]
condition
: Giá trị mà bạn muốn kiểm tra.value_if_true
: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện đúng.value_if_false
: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện sai.
Lưu ý:
- Hàm
IF
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 IF
có thể được sử dụng trong các phiên bản sau của MySQL
:
- 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 SELECT IF[1 tài khoản bị khóa
us_level = 1
=> adminus_level = 2
=> memberBây giờ ta viết Procedure đăng nhập với yêu cầu như sau:
- Nếu
us_level = 0
=> tài khoản bị khóa - Nếu
us_level = 1
=> là admin - Nếu
us_level = 2
=> là member - Nếu không tồn tại => đăng nhập sai
Ý tưởng:
- Tạo
Procedure với tham số truyền vào là gồm
username
vàpassword
thuộc loạiIN
, cònresult
thuộc loạiOUT
để lấy sử dụng. Nếu chưa biết hai khái niệmIN
vàOUT
vui lòng đọc lại bài tham số trong Procedure. - Ta sẽ tạo một biến flag để lưu trữ
us_level
của người dùng, giá trị khởi tạo của nó là-1
. Sau khi thực hiện lệnhSELECT
nếu giá trịflag = -1
tức là không tồn tạiusername
vàpassword
trong CSDL, ngược lại thì ta sẽ checkflag
để 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