2012-05-13 51 views
10

Tôi mới sử dụng MySQL và tôi muốn cập nhật toàn bộ hàng trong MySQL bằng một mảng mới, cho đến nay tất cả các ví dụ về truy vấn Cập nhật liên quan đến chỉ định tên cột và giá trị mới , như sau:Cập nhật toàn bộ hàng trong MySQL

"UPDATE tablename SET columnname = '".$new_value."' WHERE columnname = '".$value."'"; 

Làm cách nào để cập nhật toàn bộ bản ghi với truy vấn cập nhật hoặc tôi nên sử dụng truy vấn thay thế?

Mọi lời khuyên sẽ được đánh giá cao.

Chỉnh sửa: Có truy vấn nào không yêu cầu chỉ định tất cả tên cột và giá trị cột mới không?

Về cơ bản tôi muốn có một truy vấn mà trông giống như sau:

Cập nhật entirerow với thisarray nơi primarykeycolumn = 'thisvalue'

+2

Cảm ơn tất cả những câu trả lời của bạn, tôi chỉ muốn họ là một ngắn hơn truy vấn/* khóc */ – grasshopper

Trả lời

19

Để làm điều đó bạn cần phải

  1. liệt kê tất cả các giá trị
  2. Biết cột và giá trị khóa chính

Vì vậy, các truy vấn cuối cùng sẽ trông giống như

UPDATE tablename 
    SET col1 = 'val1', col2 = 'val2' ... 
WHERE id = id_value 

Không có bất kỳ lệnh ma thuật để cập nhật các "toàn hàng" trong sql khác hơn tôi trình bày ở trên. Và REPLACE chắc chắn không phải là những gì bạn cần ở đây.

+1

Ok cảm ơn, sau đó tôi đoán tôi nên đừng lười biếng và bắt đầu nhập các cột đó. – grasshopper

+0

Tiêu đề cụ thể cho biết 'MySQL'. Trừ khi bạn đang cố gắng để chuyển đổi anh ta để Postgres nó không thực sự áp dụng để đề cập đến nó :) – AlienWebguy

+0

@AlienWebguy: Không cố gắng để chuyển đổi bất cứ ai. MySQL cho phép cú pháp này trong mệnh đề 'WHERE':' WHERE (a, b) = (2,3) 'là hợp lệ trong MySQL (và SQL nói chung). Nhưng nó chưa được thực hiện trong mệnh đề 'SET'. –

8

Tùy thuộc vào việc bạn muốn giữ ID hay không, giả sử ID là autoincrement.

REPLACE INTO mytable VALUES(new array) .... cũng sẽ cập nhật ID, vì nó thực sự chỉ mô phỏng DELETEINSERT.

Nếu bạn muốn giữ lại ID, sử dụng một UPDATE mytable SET foo='bar', baz='bat' WHERE id=12

Là một FYI, REPLACE nói chung là thuận tiện cho các bảng lập bản đồ nơi lĩnh vực độc đáo hoặc phím composite tiểu học không phải là một autoincrement.

+2

Và cũng không tốt khi sử dụng 'REPLACE' khi có Phím Ngoại chỉ đến bảng này (đặc biệt là với hành động' ON DELETE CASCADE' được định nghĩa). –

+0

Có không may là id là autoincrement và tôi cần phải giữ những – grasshopper

2

Bạn chắc chắn có thể thực hiện tất cả trong một truy vấn. Bạn chỉ cần thêm mục này = các mệnh đề được phân tách bằng dấu phẩy:

"UPDATE tablename 
SET column1name = '".$new_value1."', 
    column2name = '".$new_value2."', 
    column3name = '".$new_value3."' 
WHERE columnname = '".$value."'" 
2

Đó là cách chính xác.

UPDATE TABLENAME SET COLUMNAME = VALUE, COLUMN2NAME = VALUE, ETC WHERE CONDITION 
+3

"đúng" là chủ quan. – AlienWebguy

-2

Có có được một cách tương tự ...

$updateSQL = sprintf("UPDATE hotel <br>SET hotel_name=%s, contact_person_1=%s <br>WHERE hotel_id=%s",<br> 
         $_POST['hotel_name'],<br> 
         $_POST['contact_person_1'],<br> 
         $_POST['hotel_id']); 

mysql_select_db($database_hotelbookingryan, $hotelbookingryan); 
$Result1 = mysql_query($updateSQL, $hotelbookingryan) or die(mysql_error()); 
Các vấn đề liên quan