2012-04-27 22 views
9

Tôi có một tập lệnh PHP chạy một truy vấn MySQL.Sử dụng IF() Với cập nhật TRÊN TUYÊN BẬT ON trong MySQL

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)"; 

Đây là những gì tôi đang cố gắng làm: Col1 là khóa chính. Nếu có một bản sao, nó sẽ kiểm tra xem giá trị chèn cho col2 là null hay không. Nếu không, nó sẽ cập nhật với giá trị, nếu không giá trị sẽ giữ nguyên.

Chèn này không thành công. Khi tôi cố gắng chạy nó bằng tay trong SQLyog (chèn giá trị thực tế tại chỗ của các biến), tôi nhận được lỗi sau: 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 'IS NOT NULL.....'

Tôi đã kiểm tra các tài liệu tham khảo dẫn sử dụng MySQL cho LÀ KHÔNG so sánh NULL nhà điều hành (http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null), và cũng cho INSERT ... ON Cú pháp cập nhật khóa DUPLICATE (http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) và tin rằng tôi đang sử dụng cả hai một cách chính xác, nhưng rõ ràng đó không phải là trường hợp.

Tôi đang làm gì sai?

Để tham khảo, tôi đang sử dụng MySQL 5 và tập lệnh đang chạy trên máy chủ RHEL5.

Trả lời

12

Cú pháp IS NOT NULL column sai. Chính xác: column IS NOT NULL. Tôi không chắc chắn điều này 'test' là về. Bạn nói rằng bạn muốn cập nhật cột hoặc giữ nguyên cột đó.

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)"; 

mà cũng có thể được viết như sau:

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE 
      col2 = COALESCE(VALUES(col2), col2)"; 
+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! Ngoài ra, giá trị 'kiểm tra' là một sự giám sát; đây là một giá trị mà tôi đã sử dụng cho col2 khi thử nghiệm và quên xóa nó. –

Các vấn đề liên quan