Eu tenho uma tabela com duas colunas: id(int), data(text)
data contém um array de strings. Quero inserir strings nele, se ainda não estiverem presentes.
Pesquisei um pouco, cheguei a isso:
INSERT INTO schema_name.table_name(id, data) VALUES(1, '["3"]')
ON DUPLICATE KEY UPDATE data= IF(JSON_CONTAINS(data,'3', '$'), JSON_ARRAY_APPEND(data, '$', '3'), data)
Ele não insere "3" nos dados, estando ou não presente. Não retorna erro. Estou me perguntando como devo fazer isso e por que isso não funciona
Obrigado
Acho que você esqueceu de adicionar
!
, verifique o exemplo abaixo, ele adiciona qualquer novo número, exceto [1-4].Essa é uma relação simplesmente um-para-muitos entre usuários e mensagens. É fácil e eficientemente implementado por ter
user_id
namessages
mesa e terINDEX(user_id)
nessa mesa. Sem JSON (para este fim); não lento.Consertado. Houve duas questões:
Por alguns motivos, se eu quiser verificar se a string "3" está presente na matriz, preciso fornecer JSON_CONTAINS '"3"' como segundo argumento, e não '3'. No entanto, para JSON_ARRAY_APPEND '3' é suficiente.
Eu tinha o 2º e 3º argumento da minha instrução IF trocados. Como @Niyaz notou.
Esta consulta funcionou:
Irá definir isso como AA quando o perÃodo de espera de 2 dias terminar