Intereting Posts
Защищает ли urlencode () от XSS WordPress: Список сообщений без комментариев перемещение количества именованных элементов из одного массива в другой Есть ли простой способ для пользователей распечатать Flash (Open Flash Charts) из своего браузера? может ли php определять размер / разрешение монитора браузера клиента? SimpleXML: получить дочерние узлы Ошибка PHP: «Не удается передать параметр 2 по ссылке» Как преобразовать текст с помощью HTML-адресов и недопустимых символов в эквивалент UTF-8? Маршрутизация и переадресация раздела администратора CakePHP Вызовите хранимую процедуру (базу данных firebird) с php PDO facebook graph api не работает с 2.2 до 2.3 Как добавить соль в пароль пользователя? Как я могу получить PHP-скрипт ** результаты **, включенные в другой скрипт PHP? Сравнение многомерных массивов в PHP Является ли синхронизация в Amazon S3 PHP SDK / API действительно синхронизацией?

MYSQL – добавить или вставить значение в столбец в зависимости от того, пуст он или нет

Как говорится в заголовке, im пытается добавить string в столбец VARCHAR в моей таблице. Строка – это что-то вроде «// string», передняя косая черта будет использоваться позже, чтобы взорвать строку в массив в PHP. Мне было интересно, если в MYSQL есть способ выполнить CONCAT(columnname, "//string") если столбец пуст, в противном случае выполните нормальное UPDATE ... SET ... WHERE . Таким образом, я буду избегать первого значения моей будущей взорванной строки как «// string» с форвардными slahes.

Кроме того, выше я использовал жирные символы для « в MYSQL », потому что я знаю, что могу сначала запросить БД (чтобы проверить, является ли столбец пустым) с чем-то вроде:

 $q = $conn->dbh->prepare('SELECT columnname FROM tablename WHERE username=:user'); $q->bindParam(':user', $username); $q->execute(); $check = $q->fetchColumn(); 

а затем оставьте PHP решить, какая операция выполняется:

 if ($check != '') { // PERFORM A CONCAT } else { // PERFORM AN UPDATE } 

но это будет означать пустую трату времени / ресурсов из-за 2x запросов к базе данных и большего количества кода PHP.

Благодарю.

https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Это означает, что в вашем случае:

 INSERT INTO tablename (id,columnname) VALUES (1,'//string') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//string'); 

http://sqlfiddle.com/#!9/bd0f4/1

ОБНОВЛЕНИЕ Просто чтобы показать вам свои варианты:

http://sqlfiddle.com/#!9/8e61c/1

 INSERT INTO tablename (id, columnname) VALUES (1, '//string') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//string'); INSERT INTO tablename (id, columnname) VALUES (1, '//string') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//string'); INSERT INTO tablename (id, columnname) VALUES ((SELECT id FROM tablename t WHERE columnname='blahblah'), '//string') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//string'); INSERT INTO tablename (id, columnname) VALUES ((SELECT id FROM tablename t WHERE id=2), '//string') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//string'); INSERT INTO tablename (id, columnname) VALUES ((SELECT id FROM tablename t WHERE columnname='newone'), '//newone') ON DUPLICATE KEY UPDATE columnname=CONCAT(columnname,'//newone'); 

Если вы хотите, то это:

первая строка: столбец будет содержать 'firststring'

Вторая строка: столбец будет содержать 'firststring // secondstring'

затем выполните обновление следующим образом:

 UPDATE tablename SET columnname = CONCAT( IF(IFNULL(columnname,'')='','',CONCAT(columnname,'//')), :string) WHERE username=:user