2012-06-29 27 views
7

Có cách nào dễ dàng để cập nhật tất cả các giá trị sau một khóa trùng lặp không? Ví dụ:Mysql: ON TUYÊN BỐ TỪ KHÓA KHUYẾN MÃI TẤT CẢ CÁC GIÁ TRỊ?

INSERT INTO published_books 
      SELECT * FROM books 
      WHERE book_id = book_id 
      ON DUPLICATE KEY UPDATE ?everything? 

Bảng có khoảng 50 cột và cập nhật mỗi bảng sẽ gây đau. Bất kỳ ý tưởng?

+0

đau đớn cho ai? –

+10

cho bộ mã hóa ... và cho con mắt của những người lập trình khác :) – luqita

Trả lời

-3
INSERT INTO published_books(col1, col2) 
VALUES (’xxx’, ‘yyy’) ON DUPLICATE KEY UPDATE col1 = VALUES(col1) 
+2

bạn sẽ làm điều tương tự với 50 cols như thế nào? col1, col2 ... col50? – luqita

4

Bạn có thể sử dụng REPLACE INTO cho mục đích này:

REPLACE INTO published_books SELECT * from books; 
+2

Hãy lưu ý khi sử dụng 'REPLACE INTO' để nó thực sự xóa và tạo lại một hàng chỉ với thông tin trong phần chèn. Nó không cập nhật hàng như 'ON DUPLICATE KEY UPDATE'. Để biết thêm thông tin, hãy xem tại đây: http://code.openark.org/blog/mysql/replace-into-think-twice – George

0

Nếu bạn có thể tạo ra các truy vấn, bạn có thể sử dụng một cái gì đó như thế này (PHP):

$fields = array(
    'field_1', 
    'field_2', 
    'field_3' 
); 
$query = ' 
    INSERT INTO table (
    ' . implode(', ', $fields) . ' 
    ) SELECT 
     -- ... 
    ON DUPLICATE KEY UPDATE '; 
foreach ($fields as $i => $field) { 
    $query .= ($i > 0 ? ', ' : '') . $field . '=VALUES(' . $field . ')'; 
} 
Các vấn đề liên quan