Đây là giải pháp cuối cùng của chúng tôi, hoạt động như một sự quyến rũ! Và chỉ một lựa chọn.
mysql> desc test;
+-------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-------------------+-------+
| id | int(11) | NO | PRI | NULL | |
| value | varchar(255) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+--------------+------+-----+-------------------+-------+
mysql> insert ignore into test values (4, "foo", now());
Query OK, 1 row affected (0.01 sec)
mysql> insert into test select id, "foo", now() from test where id = 4 and ts < now() on duplicate key update value = values(value), ts = values(ts);
Query OK, 2 rows affected (0.00 sec)
Records: 1 Duplicates: 1 Warnings: 0
Nguồn
2010-03-18 12:47:48
Tôi không bao giờ biết tôi có thể truy cập giá trị bảng ban đầu bên trong phần UPDATE. Điều này có thể giải quyết vấn đề của tôi (mặc dù công việc cũ của tôi xung quanh là khá tốt :)) –
Nó có thể xảy ra rằng MySQL sẽ phàn nàn về 'cột trong danh sách lĩnh vực là mơ hồ' - sau đó bạn cần phải sử dụng: 'ON TUYÊN BỐ TĂNG KHÓA CHÍNH daily_events.last_event_id = IF (daily_events.last_event_created_at
boryn
Liên kết được đăng lên thewebfellas.com đã chết, thật đáng buồn. –