dongmi1663 2013-05-22 22:36
浏览 6
已采纳

如果值尚未存在,则更新单元格值

I have to update the column File on the TABLE TEST. This column contains the files related to the row. Each file is separated by a |.

An example could be

ID    NAME    FILE
 1    apple   fruit.png | lemon.png

Now when I add a new file to the FILE column I use this query:

$link->query("UPDATE TEST SET File = CONCAT(File, '$dbfilename') WHERE id = '$p_id'")

where $dbfilename can be e.g. pineapple.jpg |

The problem is that, if $dbfilename is already on the File values, it will be added another time, resulting double.

How can I check if File contains already $dbfilename, and if yes, don't add id, or even don't execute the query?

  • 写回答

3条回答 默认 最新

  • dongtanzhu5417 2013-05-22 22:47
    关注

    This is not a good way of storing information in a database. But I'll get to that in a second. To directly answer your question, you could use this as your SQL query:

    UPDATE TEST SET File = CONCAT(File, '$dbfilename')
    WHERE id='$p_id'
        AND File NOT LIKE '%$dbfilename%'
        AND Lingua='$linguadilavoro'
    

    However, this may cause some issues when one file pineapple.jpg and you try to add another-pineapple.jpg

    Really, I think you should consider how this is a horribly bad approach to databases. Consider breaking the files off into a second table. For example:

    # a table for the fruit names
    CREATE TABLE fruits (
        id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(250) NOT NULL,
        UNIQUE INDEX(name)
    );
    
    # a table for file names
    CREATE TABLE files (
        fileid INT UNSIGNED NOT NULL DEFAULT PRIMARY KEY AUTO_INCREMENT,
        fruitid INT UNSIGNED,
        filename VARCHAR(250),
        UNIQUE INDEX(fruitid, filename)
    );
    
    # find all of the fruits with their associated files
    SELECT fruits.id, fruits.name, files.filename
    FROM fruits LEFT JOIN files ON fruits.id=files.fruitid
    
    # add a file to a fruit
    INSERT INTO files (fruitid, filename)
    VALUES ('$fruitID', '$filename')
    ON DUPLICATE KEY UPDATE fruitid=LAST_INSERT_ID(id)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。