Intereting Posts
Ошибка WordPress Apache VirtualAlloc и VirtualFree, PHP из памяти WordPress Сохранить форму Option Customizer Как сохранить несколько значений в базе данных из Select2 Widget Yii2 Данные Varchar показывают результаты выборочно Как я получаю от привычки процедурного программирования и объектно-ориентированного программирования? PHP Сплит-строка после символов X в отдельное слово Как получить код для проверки правильности комбинации имени пользователя и пароля? COALESCE все поля в разных таблицах JOIN Код ошибки Freebase: 403 – предел пользовательской скорости превышен. Пожалуйста, зарегистрируйтесь Вытягивание изображения из пользовательской таксономии с помощью ACF Начало разработки PHP – рекомендации по стеку программ и ресурсы веб-сайта Получать отфильтрованные значения из значений типа массива между диапазоном 10-20 preg_match все абзацы строки Как установить инструмент Zend Framework 2 с композитором Запрос MSSQL возвращает неизвестный тип данных в поле даты CONVERT

Проверить, существует ли, если да, обновить на 1 ++, если не вставить

Привет, ребята, быстрый вопрос, у меня в настоящее время есть инструкция insert $query= "INSERT into new_mail VALUES ('$to1', '0')"; где поля – имя пользователя, и message_number. В настоящее время, что я сделал бы, чтобы проверить, существует ли запись, выполняет запрос выбора, а затем проверяет количество строк с помощью mysql_num_rows (php). Если строки == 1, то я получаю текущий номер_сообщения и устанавливаю его равным

 $row['message_number']+1. 

Затем я обновляю эту запись другим запросом.

Есть ли более простой способ сделать все это только в mysql только с одним запросом (проверить, существует ли, если не вставить, если так обновить message_number, увеличить на 1)?

Используйте INSERT...ON DUPLICATE KEY UPDATE . В руководстве по MySQL есть пример, который делает практически то, что вам нужно:

 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; 

Для выполнения этой работы вам нужно добавить индекс UNIQUE в столбец, который вы используете для проверки дубликатов. Однако есть одно важное предупреждение:

В общем, вы должны стараться избегать использования предложения ON DUPLICATE KEY в таблицах с несколькими уникальными индексами.

В зависимости от структуры вашей таблицы вы можете использовать функцию ON DUPLICATE KEY UPDATE (ссылка на руководство MySQL) INSERT :

 INSERT into new_mail VALUES ('$to1', '0') ON DUPLICATE KEY UPDATE message_number=message_number+1 

Немного смущенный вашим вопросом и вашими структурами таблиц, но я думаю, что вам нужно что-то подобное.

 INSERT INTO new_mail (username, message_number) VALUES ($username, $message_number) ON DUPLICATE KEY UPDATE message_number=message_number + 1; 

Предполагается, что username является вашим основным ключом (скорее всего, это похоже на userid). Надеюсь это поможет.

EDIT: ответы ON DUPLICATE KEY UPDATE лучше, но вы можете сделать это (ускользает запрос выбора):

Предполагая, что вы используете экстензон mysqli:

 $db = //Some construction of mysqli object; $sql = 'UPDATE tablename SET RowValue = RowValue + 1 WHERE message_number = ?'; $updateStatement = $db->prepare($sql); $updateStatement->bind_param('i', $message_number); $message_number = //Set message number; $updateStatement->execute(); if ($updateStatement->affectedRows == 0) { $sql = 'INSERT INTO tablename (RowValue, message_number) VALUES (?, ?)'; $insertStatement = $db->prepare($sql); $insertStatement->bind_param('ii', $rowValue, $messageNumber); $rowValue = something; $messageNumber = something; $insertStatement->execute(); }