MYSQL – adicione ou insira o valor em uma coluna dependendo se está vazio ou não

Como o título diz, estou tentando append uma string a uma coluna VARCHAR na minha mesa. A string é algo como “// string”, as barras laterais serão usadas mais tarde para explodir a string para uma matriz em PHP. Eu estava pensando se há uma maneira no MYSQL para realizar um CONCAT(columnname, "//string") se a coluna estiver vazia, caso contrário, execute uma UPDATE ... SET ... WHERE normal UPDATE ... SET ... WHERE . Desta forma, eu evitarei o primeiro valor da minha corda explodida no futuro para ser uma “// string” com slaves para a frente.

Além disso, acima, usei caracteres em negrito para ” no MYSQL ” porque sei que eu poderia primeiro consultar o database (para verificar se a coluna está vazia) com algo como:

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

e então deixe o PHP decidir qual operação executa:

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

mas isso significaria um desperdício de tempo / resources devido a chamadas de database 2x e mais código PHP.

obrigado.

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

Isso significa no seu caso:

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

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

UPDATE Apenas para mostrar suas opções:

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'); 

Se o que você quer é o seguinte:

primeira seqüência: a coluna conterá ‘primeira input’

segunda cadeia: a coluna conterá ‘firststring // secondstring’

então faça a atualização como esta:

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