Làm cách nào để viết câu lệnh IF ELSE trong một truy vấn MySQL


86

Làm cách nào để viết câu lệnh IF ELSE trong truy vấn MySQL?

Một cái gì đó như thế này:

mysql_query("...(irrelevant code).. IF(action==2&&state==0){state=1}");

Sau đó, trong mảng của tôi, tôi sẽ có thể làm điều này:

 $row['state'] 
//this should equal 1, the query should not change anything in the database, 
//just the variable for returning the information

Câu trả lời:


150

Bạn có thể muốn sử dụng một CASEbiểu thức .

Chúng trông như thế này:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;

1
Cảm ơn, câu trả lời của bạn có vẻ dễ theo dõi hơn, (tùy theo trường hợp được cho là sử dụng trong truy vấn, tuy nhiên tôi không thể làm cho nó hoạt động bình thường: "SELECT *, N.id (CASE WHEN (N. action == 2 AND N.state == 0) SAU 1 ELSE 0 END) AS N.state FROM thông báo N, bài đăng P WHERE N.userID = '$ session' AND N.uniqueID = P.id AND P.state = '0' AND N.action = '1' ORDER BY N.date DESC "
Dylan Cross

2
@DylanCross Hình như bạn có thể thiếu một dấu phẩy giữa N.id(CASE WHEN ...
Jack Edmonds

1
Ahh, không thấy, nhưng ngay cả khi tôi đặt dấu phẩy, nó vẫn không hoạt động.
Dylan Cross

@DylanCross Bạn cũng có thể cần thay đổi AS N.statethành AS state.
Jack Edmonds

8
@DylanCross Không sử dụng MySQL =thay vì ==để so sánh?
Jack Edmonds

27

bạn phải viết nó bằng SQL chứ không phải kiểu C / PHP

IF( action = 2 AND state = 0, 1, 0 ) AS state

để sử dụng trong truy vấn

IF ( action = 2 AND state = 0 ) THEN SET state = 1

để sử dụng trong các thủ tục hoặc chức năng được lưu trữ


Tôi không thể làm cho điều này hoạt động với mã của tôi, có lẽ vị trí của tôi bị sai hoặc một cái gì đó: SELECT *, N.id IF (N.action = 2 AND N.state = 0, 1, 0) AS N.state FROM thông báo N, bài đăng P WHERE N.userID = '$ session' AND N.uniqueID = P.id AND P.state = '0' AND N.action = '1' ORDER BY N.date DESC
Dylan Cross

15

Bạn đang tìm kiếm case:

case when action = 2 and state = 0 then 1 else 0 end as state

MySQL có một ifcú pháp ( if(action=2 and state=0, 1, 0)), nhưng casephổ biến hơn.

Lưu ý rằng as statecột chỉ có răng cưa. Tôi giả sử điều này nằm trong danh sách cột của truy vấn SQL của bạn.


Đây là một câu trả lời tốt hơn nhiều
bretterer

15
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

HOẶC LÀ

SELECT col1, col2, (case when (action = 2 and state = 0) then 1 else 0 end) as state from tbl1;

cả hai kết quả sẽ giống nhau ....


một điều tôi nhận thấy nhưng không thể tìm thấy tài liệu về nó là IF phải là cột cuối cùng trong danh sách các cột. Nếu nó là đầu tiên, thì nó sẽ báo lỗi. Bất cứ ai biết nơi để xem điều này trong tài liệu? Nó làm tôi phát điên. Khi tôi phát hiện ra điều gì đó, tôi muốn nhìn thấy nó ghi lại để tham khảo trong tương lai
carinlynchin

8

theo hướng dẫn sử dụng tham chiếu mySQL, cú pháp sử dụng câu lệnh if và else:

IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

Vì vậy, liên quan đến truy vấn của bạn:

x = IF((action=2)&&(state=0),1,2);

hoặc bạn có thể sử dụng

IF ((action=2)&&(state=0)) then 
state = 1;
ELSE 
state = 2;
END IF;

Có một ví dụ điển hình trong liên kết này: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


2
Liên kết đến một giải pháp được hoan nghênh, nhưng hãy đảm bảo rằng câu trả lời của bạn hữu ích nếu không có nó: thêm ngữ cảnh xung quanh liên kết để những người dùng đồng nghiệp của bạn sẽ biết nó là gì và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn ' đang liên kết lại trong trường hợp trang đích không có sẵn. Các câu trả lời ít hơn một liên kết có thể bị xóa.
MAR
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.