Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更新MYSQL中的特定行_Php_Mysql - Fatal编程技术网

Php 如何更新MYSQL中的特定行

Php 如何更新MYSQL中的特定行,php,mysql,Php,Mysql,我有一个表,在那里我存储用户上传的文件。可以有5种不同的文件类型:个人资料图片、cpr文件、学位文件、视频文件、背景检查文件 表结构如下所示: file_id, user_id, file_type, file_size, file_name, file_new_name, file_path, file_cat, date_created 我的问题是: 这种结构有效吗?还是我应该创建5个不同的表 如果我想更新,比如说用户配置文件图片行,那么最好的方法是什么?--我想出了一个可能不是最好的解决

我有一个表,在那里我存储用户上传的文件。可以有5种不同的文件类型:个人资料图片、cpr文件、学位文件、视频文件、背景检查文件

表结构如下所示:

file_id, user_id, file_type, file_size, file_name, file_new_name, file_path, file_cat, date_created
我的问题是:

  • 这种结构有效吗?还是我应该创建5个不同的表
  • 如果我想更新,比如说用户配置文件图片行,那么最好的方法是什么?--我想出了一个可能不是最好的解决方案——我更新了
    file\u cat=“profile\u picture”和user\u id=:user\u id
    所在的行。这会给系统带来很大的负荷吗
  • 首先,当用户注册时,他没有任何文件。我应该将用户
    插入到。。。价值观在表单中使用隐藏值进行重复密钥更新时

  • 提前谢谢。

    这是三个问题,不是一个问题

    这种结构有效吗?还是我应该创建5个不同的表

    一张桌子就够了

    如果我想更新,比如说用户配置文件图片行,那么 最好的办法是什么我想出了一个解决办法 这可能不是最好的-我更新了文件所在的行 =“profile\u picture”和user\u id=:user\u id。这会给系统带来很多负载吗

    如果您在文件\u cat、用户\u id(两个字段上的复合索引)上有索引,则不会。如果你想让事情变得更精简,你可以存储常量而不是“profile_picture”等

    profile_picture = 1
    cpr = 2
    ....
    background = 6
    
    这将使表和索引稍微小一些。这可能会使查询稍微快一点

    首先,当用户注册时,他没有任何文件。我应该使用用户吗 插入到。。。价值观使用隐藏值进行重复密钥更新时 以某种形式

    没必要那样。没有新用户记录实际上让事情变得更容易。您可以执行
    COUNT(*)=0
    查询,或者更好地执行
    EXISTS
    查询,而无需获取行并检查它们

    更新: 当您处理连接或子查询(例如,快速查找用户是否上传了个人资料picc)时,这些现有查询非常有用

    SELECT * from users WHERE exists (SELECT * from pictures where pictures.user_id = users.id)
    

    如果您正确使用主键,则您的
    插入。。。在重复密钥更新时…
    query将为您完成所有操作

    对于您的表,您需要定义一个主键列。在这种情况下,我会说这是您的
    文件\u id
    列。因此,如果您执行插入,MySQL服务器将检查您的
    file\u id
    列是否已为该值定义,如果已定义,则将使用新值更新,否则将使用新的
    file\u id
    添加一行新数据

    我应该很容易将它分开,制作一个用于创建新行的脚本和另一个用于更新的脚本。通常,您会知道在应用程序中何时创建而不是何时更新。再次,正确使用主键将对您有很大帮助。在
    where
    子句中使用主键是最有效的更新方法之一


    不要将文件存储在数据库中,而是将其存储在磁盘上。参考文件在数据库中的位置。关于结构-这只是我的意见,但是个人资料图片会经常被访问,所以他们最好有自己的表。对它们的查询返回的速度应该比与其他查询一起存储时快得多。@KIKOSoftware是的。文件存储在磁盘上,路径在数据库中。问题的标题与实际问题不同。如果您存储的是配置文件图片文件,文件名中带有用户id,则不需要数据库行。谢谢您的解释,先生。您能给我一个关于If exists查询的快速示例吗?我使用了行计数。似乎需要更多的工作,但它确实有效。就性能而言,行计数和if exists之间是否有任何差异?是的,exists只需要检查一行。Count需要对所有匹配的rowsPerfect进行计数。谢谢你的解释。非常感谢