2010-11-11 40 views
6

Tôi đã thực hiện thành công điều này với câu lệnh UPDATE trước đây nhưng không phải là REPLACE.Giá trị trường gia tăng trên REPLACE

Tôi đang lưu các mục yêu thích trong bảng mysql khi người dùng đã đăng xuất.

Bảng favs là:

USER (int) 
ITEM (int) 
COUNT (int default 0) 

SQL tôi đang cố gắng là:

REPLACE INTO favs (user,item,count) VALUES ('1','3', count + 1) 

mặc dù nó không ném bất kỳ lỗi nào nó dường như không để tăng giá trị trong hai.

Điều này có khả thi không? Cảm ơn bạn.

Trả lời

15

Dường như nó không hoạt động như thế này trên thay thế. Từ manual:

Bạn không có thể tham khảo giá trị từ hàng hiện tại và sử dụng chúng trong hàng mới. Nếu bạn sử dụng một bài tập như SET col_name = col_name + 1, tham chiếu đến tên cột ở phía bên tay phải được đối xử như DEFAULT (col_name), do đó việc chuyển nhượng tương đương với SET col_name = DEFAULT (col_name) + 1.

Edit:

Tuy nhiên, INSERT ... ON DUPLICATE CẬP NHẬT có thể làm những gì bạn đang cố gắng để hoàn thành:

INSERT INTO favs (user, item) VALUES (2, 3) 
    ON DUPLICATE KEY UPDATE count = count + 1; 
+0

OK không w orries Tôi sẽ làm một tuyên bố UPDATE riêng ngay sau đó. Cảm ơn bạn. – Titan

+0

Vui lòng xem chỉnh sửa của tôi - đây có phải là những gì bạn đang cố gắng làm không? Nếu vậy, nó sẽ an toàn hơn và hiệu quả hơn các câu lệnh thay thế và cập nhật riêng biệt. – Thilo

+1

yer hoạt động rất tốt, ngoại trừ bạn cần xóa 'SET' khỏi câu lệnh để nó hoạt động. – Titan

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