Trong bài này mình sẽ hướng dẫn cách sử dụng hàm Show 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 2. Cú phápCú pháp của hàm IF( condition, [value_if_true], [value_if_false] ) Trong đó: Bài viết này được đăng tại [free tuts .net]
Lưu ý:
3. VersionHàm
4. Ví dụmysql> SELECT IF(1<2, 'dung', 'sai'); Ket qua: 'dung' mysql> SELECT IF(1<2, 1, 2); Ket qua: 1 Bài viết được sự cho phép của tác giả Nguyễn Văn Minh Bạn đã bao giờ tự hỏi: Trong MySQL, câu lệnh CASE, câu lệnh IF và hàm IF khác nhau thế nào? Bạn có thấy phân vân khi chọn một trong ba thứ trên để viết query? Đây không phải câu hỏi mới nhưng nhiều bạn sẽ bỡ ngỡ khi tiếp xúc với nó. Nhất là khi bạn vừa bắt đầu tìm hiểu về MySQL và cơ sở dữ liệu quan hệ.
Cú phápCâu lệnh CASE CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END Câu lệnh IF IF condition1 THEN {...statements to execute when condition1 is TRUE...} [ ELSEIF condition2 THEN {...statements to execute when condition1 is FALSE and condition2 is TRUE...} ] [ ELSE {...statements to execute when both condition1 and condition2 are FALSE...} ] END IF; Hàm IF IF(expr1,expr2,expr3) Đào sâu hơnNhìn vào cú pháp trên đây, ta có thể thấy, dường như hàm IF ít linh hoạt hơn câu lệnh CASE. Nếu bạn viết thế này: SELECT IF(movie = 'The Matrix', 'high', 'low') AS suggestion Thì bạn hoàn toàn có thể dùng CASE như thế này: SELECT CASE WHEN movie = 'The Matrix' THEN 'high' ELSE 'low' END AS suggestion Khá là giống nhau đúng không? Trừ việc hàm IF trông gọn gàng hơn chút ít. Nhưng nếu có nhiều hơn hai nhánh thì sao? Có lẽ bạn sẽ không muốn viết thế này: SELECT IF(movie = 'The Matrix', 'high', IF(movie = 'Endgame', 'medium', 'low')) AS suggestion Mà nên là thế này: SELECT CASE movie WHEN = 'The Matrix' THEN 'high' WHEN = 'Endgame' THEN 'medium' ELSE 'low' END AS suggestion Nó cũng tương tự như khi ta dùng Có một điều bạn phải chú ý. Trong khi câu lệnh CASE là câu lệnh chuẩn của SQL thì hàm IF lại hoàn toàn không phải. Điều đó có nghĩa gì? Nếu bạn có ý định chuyển sang dùng SQL Server hay PostgreSQL chẳng hạn, hàm IF sẽ không còn hoạt động nữa. Ở một diễn biến khác, câu lệnh IF là cái gì đó rất lạ lẫm với hai thứ trên. Nó được dùng khi viết thủ tục (procedure). Ví dụ: CREATE FUNCTION get_suggestion (movie varchar(50)) RETURNS varchar(20) BEGIN IF movie = 'The Matrix' THEN return 'high'; ELSEIF movie = 'Endgame' THEN return 'medium'; ELSE return 'low'; END IF; END; Do đó, chớ nên nhầm lẫn mục đích sử dụng của câu lệnh IF với hàm IF, hay thậm chí câu lệnh CASE. Chúng sinh ra vì những “sứ mệnh” khác nhau. Trong bài này mình sẽ hướng dẫn cách sử dụng hàm Nội dung chính
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 2. Cú phápCú pháp của hàm IF( condition, [value_if_true], [value_if_false] ) Trong đó: Bài viết này được đăng tại [free tuts .net]
Lưu ý:
3. VersionHàm
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 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 2. Cú phápCú pháp của hàm IF( condition, [value_if_true], [value_if_false] ) Trong đó: Bài viết này được đăng tại [free tuts .net]
Lưu ý:
3. VersionHàm
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 Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Tới đây chắc hẳn bạn thấy 1. Tìm hiểu mệnh đề if else trong MySqlMệnh đề if cho phép
bạn tạo luồng xử lý rẻ nhánh, nếu đúng thì thực thì và ngược lại mệnh đề sai thì nó sẽ không thực thi. Thông thường chúng ta kết hợp các toán tử, toán hạng và biến trong mysql để tạo ra các mệnh đề đúng sai trong điều kiện của lệnh Cú pháp mệnh đề if - else trong MYSQL như sau: 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:
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 ProcedureBâ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: 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
Bây giờ ta viết Procedure đăng nhập với yêu cầu như sau:
Ý tưở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: CALL checkLogin('admin', 'vancuong', @result); SELECT @result; -- hoặc CALL checkLogin('member', 'vancuong', @result); SELECT @result; -- hoặc CALL checkLogin('banded', 'vancuong', @result); SELECT @result; Bạn hãy chạy lên và xem thành quả nhé. Lời kết:Câu lệnh |