Intereting Posts
Где дезинформировать PHP $ _POST вход? почему некоторые php-файлы не заканчиваются закрывающей скобкой «?>»? Как игнорировать каталоги с помощью RecursiveIteratorIterator? Как сгенерировать все перестановки строки в PHP? Some Hosting Not Liking SET NAMES utf8 – «Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны». PHP Создание таймслотов с временным отключением с использованием DatePeriod Facebook API / PHP – Можно ли изменить изображение профиля пользователя с помощью FB Graph API? htaccess mod-rewrite: ссылка на подкаталог от root-neglect dirs в подкаталоге? PHP 5 и Zend MVC для Windows и IIS Наследование цепей Symfony2 потеряет родительские пучки PHP MySQL вставляет многомерный ассоциативный массив, строящий запрос из ключей массива php / symfony2 скрывает app.php из URL-адреса WooCommerce – обрабатывать элементы корзины отдельно, если количество больше 1 исключить аутентификацию аутентификации с помощью symfony2 Перенаправление PHP не работает на сервере

Если существует обновление else, добавьте в один запрос

У меня такая простая таблица:

+----------+---------------+-------------+ | ID (int) | KEY (varchar) | VALUE (int) | +----------+---------------+-------------+ | 1 | asdf | 100 | | 2 | fdsa | 321 | | 3 | ecda | 211 | +----------+---------------+-------------+ 

и я хочу обновить строку, где KEY = 'something' но если нет строки, где KEY = 'something' я хочу INSERT новую строку INSERT :

 +----------+---------------+-------------+ | ID (int) | KEY (varchar) | VALUE (int) | +----------+---------------+-------------+ | 1 | asdf | 100 | | 2 | fdsa | 321 | | 3 | ecda | 211 | | 4 | something | 200 | +----------+---------------+-------------+ 

Возможно ли это только в одном запросе?

Related of "Если существует обновление else, добавьте в один запрос"

Вы можете использовать ON DUPLICATE KEY UPDATE

 INSERT INTO yourtable (`id`, `key`, `value`) VALUES (4, 'something', 200) ON DUPLICATE KEY UPDATE `value` = 200; 

key столбец должен иметь на нем индекс UNIQUE

SQLFiddle

Да, это довольно просто.

Это то, что вы ищете:

 IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue') UPDATE Table1 SET (...) WHERE Column1='SomeValue' ELSE INSERT INTO Table1 VALUES (...)