2012-05-13 4 views
10

Я новичок в MySQL, и я хочу обновить всю строку в MySQL с помощью нового массива, пока все примеры запроса Update включают указание имени столбца и нового значения для этого колонки, например:Обновить всю строку в MySQL

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

Как обновить всю запись с помощью запроса на обновление или использовать запрос замены?

Любые советы будут оценены.

Редактировать: Есть ли запрос, который не требует указания всех имен столбцов и новых значений столбцов?

В основном я хочу иметь запрос, который выглядит примерно так:

Update EntireRow с thisarray где primarykeycolumn = 'thisvalue'

+2

Спасибо за все ваши ответы, я просто хочу, чтобы их было меньше, запрос/* плачет */ – grasshopper

ответ

19

Для этого вам нужно

  1. Перечислим все значения
  2. Знайте колонку первичного ключа и значение

Таким образом, окончательный запрос будет выглядеть

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

Там нет никакой магии команды для обновления «целый ряд» в SQL другой, чем я показано выше. И REPLACE определенно не то, что вам нужно здесь.

+1

Ok спасибо, то я думаю, что я должен перестаньте лениться и начните печатать эти столбцы. – grasshopper

+0

Название конкретно указано 'MySQL'. Если вы не пытаетесь преобразовать его в Postgres, это не относится к упоминанию об этом :) – AlienWebguy

+0

@AlienWebguy: Не пытайтесь преобразовать кого-либо. MySQL допускает этот синтаксис в предложении WHERE: 'WHERE (a, b) = (2,3)' имеет значение в MySQL (и вообще SQL). Но это еще не реализовано в предложении 'SET'. –

8

Это зависит от того, хотите ли вы сохранить идентификатор или нет, при условии, что идентификатор autoincrement.

REPLACE INTO mytable VALUES(new array) .... также обновит идентификатор, так как он действительно просто эмулирует DELETE и INSERT.

Если вы хотите сохранить идентификатор, используйте UPDATE mytable SET foo='bar', baz='bat' WHERE id=12

В качестве FYI, REPLACE, как правило, удобно для таблиц отображения, где единственное поле или композитный первичный ключ не является автоинкремент.

+2

И также не рекомендуется использовать 'REPLACE', если есть внешние ключи, указывающие на эту таблицу (особенно при определенном действии' ON DELETE CASCADE'). –

+0

Да, к сожалению, идентификатор является автоинкрементным, и мне нужно сохранить их – grasshopper

2

Вы можете сделать все это в одном запросе. Вы просто добавляете еще это = эти статьи, разделенные запятыми:

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

Это правильный путь.

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

«Правильно» является субъективным. – AlienWebguy

-2

Да есть подобный способ ...

$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());