Как одним запросом обновить множество строк?
Вопрос:
$array_update — массив записей для обновления БД.
Как написать аналогичный запрос на UPDATE нескольких записей по выборочным id ? Учитывая, что записей может обновляться порядка 10-ти штук за 1 раз.
Как должны выглядеть значения массива $array_update ? Обновление Мне необходимо сделать апдейт следующим образом: у меня есть список уникальных id и, соответствующие каждому id , строки для апдейта (данные в строках могут повторяться). Необходимо одним запросом сделать апдейт всех строк, где поле id соответствует текущему id из списка. Почитал про INSERT . ON DUPLICATE KEY UPDATE. пока не понимаю, как применить к моей ситуации.
@lommusic, какое-то странное обновление, где нужно десяток записей изменять. Ощущение, что структура БД не совсем правильно составлена. Данные на обновление для всех записей одинаковы?
Запрос, как обычно, но условие или через OR, или IN: UPDATE table_name SET field = ‘new_value’ WHERE id IN (1,2,50, 100, N); Если вы говорили о каких-то массивах, то в данном случае — это может быть массивом id-шников: $query = «UPDATE table_name SET field = ‘new_value’ WHERE id IN («.implode(‘,’, $array_id).»)»; Кроме того, есть конструкция INSERT . ON DUPLICATE KEY UPDATE, которую так же можно использовать для обновлений, при условии наличия уникальных/первичных ключей. Но в вашем случае, как я понял, этот способ не подойдет.
@Deonis мне необходимо сделать апдейт следующим образом: у меня есть список уникальных id и, соответствующие каждому id, строки для апдейта (данные в строках могут повторяться). Необходимо одним запросом сделать апдейт всех строк, где поле id соответствует текущему id из списка. Почитал про INSERT . ON DUPLICATE KEY UPDATE. пока не понимаю, как применить к моей ситуации.
3 ответа 3
Если хотите использовать ON DUPLICATE KEY UPDATE , то вот пример, как это сделать. Тестировал на tutorialspoint.com:
MariaDB [(none)]> create database test_1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use test_1 Database changed MariaDB [test_1]> create table t1 (id INT NOT NULL AUTO_INCREMENT, name varchar(100), email varchar(100), PRIMARY KEY (id) ); Query OK, 0 rows affected (0.03 sec) MariaDB [test_1]> insert into t1 (name, email) values ('user1', 'user1@gmail.com'), ('user2', 'user2@gmail.com'); Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [test_1]> select * from t1; +----+-------+-----------------+ | id | name | email | +----+-------+-----------------+ | 1 | user1 | user1@gmail.com | | 2 | user2 | user2@gmail.com | +----+-------+-----------------+ 2 rows in set (0.01 sec) MariaDB [test_1]> INSERT INTO t1 (id, name, email) VALUES (1, 'user1', 'new_email_user1@gmail.com'), (2, 'new_name', 'user2@gmail.com') ON DUPLICATE KEY UPDATE name = VALUES(`name`), email = VALUES(`email`); Query OK, 4 rows affected (0.01 sec) Records: 2 Duplicates: 2 Warnings: 0 MariaDB [test_1]> select * from t1; +----+----------+---------------------------+ | id | name | email | +----+----------+---------------------------+ | 1 | user1 | new_email_user1@gmail.com | | 2 | new_name | user2@gmail.com | +----+----------+---------------------------+ 2 rows in set (0.00 sec)
How to update multiple columns in mysql using php
i have 5 column values to be updated in table, i am using variable to save data and using that variable want to update the values in table how can i do that?
@Mithun Please check your query. I think, you are confused with INSERT and UPDATE query. Refer the UPDATE query syntax here
5 Answers 5
$sql = "UPDATE `product_list` SET `product_name` = '$product_name', `product_category` = '$product_category', `product_price` = '$product_price', `product_description` = '$product_description', `product_size_category` = '$size_category' where clause. (if required) ";
$sql = "UPDATE product_list SET product_name='".$product_name."',product_category='".$product_category."',product_price='".$product_price."',product_description='".$product_description."',size_category='".$size_category."' WHERE product_id https://dev.mysql.com/doc/refman/5.0/en/update.html" rel="nofollow">https://dev.mysql.com/doc/refman/5.0/en/update.html