【问题标题】:MySql: add data to column without delete the previous onesMySql:将数据添加到列而不删除以前的数据
【发布时间】:2020-04-04 13:42:32
【问题描述】:

我正在尝试制作一个笔记保存系统。 我有一个 html 登录页面,当用户登录时,会出现一个表单来输入一些要存储的注释。我的 mysql 数据库中有 3 列:用户名、密码和存储数据。

例如,假设用户拥有这些:Username:david | Password:david | StoredData: apple,orange

有没有办法执行查询,所以当用户回来并添加另一个注释不要覆盖以前的注释(苹果,橙色)

相反,向数据库添加另一个注释,例如:我添加香蕉。现在数据库应该是StoredData:apple,orange,banana

【问题讨论】:

    标签: mysql sql database csv sql-update


    【解决方案1】:

    您可以使用字符串连接:concat_ws() 很方便,因为它会跳过 null 值(因此考虑到列最初为空的情况):

    update mytable 
    set stored_data = concat_ws(',', stored_data, 'banana')
    where name = 'david'
    

    但是请注意,您的设计未正确规范化。用户与其备注之间存在 1-N 关系:您应该有一个单独的表来存储备注,每个备注位于单独的行中,而不是存储分隔列表:

    table users
    
    name    | password
    david   | ...
    
    table notes
    
    user_name  | note
    david      | apple
    david      | orange
    david      | banana
    

    相关阅读:Is storing a delimited list in a database column really that bad?.

    【讨论】:

      【解决方案2】:

      您可能需要考虑该值是否已存在于列中并且不更新:

      update tablename
      set storeddata = case 
        when find_in_set('banana', storeddata) then storeddata
        else concat_ws(',', storeddata, 'banana')
      end
      where username = 'David';
      

      请参阅demo

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 1970-01-01
        相关资源
        最近更新 更多