Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 如何在数据库中存储多个图像_Php_Mysql - Fatal编程技术网

Php 如何在数据库中存储多个图像

Php 如何在数据库中存储多个图像,php,mysql,Php,Mysql,我想知道,如果我为每个用户存储图像,我应该为每个图像在数据库中创建一个字段吗?假设每个用户都可以上传10张图片,这是否意味着我必须在数据库中创建imagname 1、imagname 2等字段?当然不是。这不是关系数据库的使用方式。而是使用两个表:一个用于用户,一个用于图像。在images表中,使用列在users表中存储用户id。这样,每个用户可以存储任意数量的图像,并且可以使用联接查询查询所有图像 比如说: CREATE TABLE users ( user_id int(11) auto

我想知道,如果我为每个用户存储图像,我应该为每个图像在数据库中创建一个字段吗?假设每个用户都可以上传10张图片,这是否意味着我必须在数据库中创建imagname 1、imagname 2等字段?

当然不是。这不是关系数据库的使用方式。而是使用两个表:一个用于用户,一个用于图像。在images表中,使用列在users表中存储用户id。这样,每个用户可以存储任意数量的图像,并且可以使用联接查询查询所有图像

比如说:

CREATE TABLE users (
  user_id int(11) auto_increment NOT NULL PRIMARY KEY,
  name VARCHAR(1024) NOT NULL
);


CREATE TABLE images (
  img_id int(11) auto_increment NOT NULL PRIMARY KEY,
  user_id int(11) NOT NULL,
  image blob
);

现在,您可以使用以下内容获取用户图像列表:
从图像中选择img\u id LEFT JOIN users ON(images.user\u id=users.user\u id),其中users.name='some one'

否。添加唯一的用户id,以便图像将与此id关联,稍后在MySQL之类的关系数据库系统中执行查询时,只需选择用户id为某物的图像,您将有两个表:
用户
用户_图像
。对于用户上载的每个图像,
users\u images
表中插入一条记录,并将图像的文件名和用户ID作为外键


如果需要限制用户只能上传10张图像,但不能超过10张,则此逻辑属于您的应用程序。

更好的是,您可以为要查询的表列添加索引(它可以提高大型数据表的性能)。您需要插入具有唯一id的图像并将其标记给用户

如果您计划为每个用户添加多个图像,最好使用图像、用户和用户图像表


例如,您需要了解规范化是如何工作的。在您的情况下,用户与映像有1-*关系。所以你可以设计两张桌子 1.使用者 2.用户ID引用用户表中用户ID的图像表

Table User
------------------------------
User Id  |  User Name |  Image 
------------------------------
    1    | Example    | image id (for default image)
------------------------------

Table Images (With User Id as FK)
-----------------------------------------
Image Id  |  User Id (FK) |  Image name 
-----------------------------------------
    1     |   1           |  imagename
-----------------------------------------

在Table User中,您可以将一个图像保存为默认配置文件图像,其他图像可以保存在images表中。

绝对不可以。你必须有两个表,在那里你必须使用外键。如果您使用的是mysql,请记住将两个表都更改为InnoDB引擎。一个表应该引用另一个具有id的表,并且这些id的所有数据类型必须与第一个表和第二个表相同。看看@arkascha给出的示例,这是一个非常好的示例,它应该会对您有所帮助。

阅读一些关于数据库规范化的内容…;-)我不同意“三张表”的说法,我只想把用户id和imagesWell@Coulton放在一起,这取决于你或用户设计你需要的方式。我更喜欢保持完全规范化的表和关系。在OP的例子中,两个表模式仍然比膨胀一个表更好…非常感谢各位,我现在100%理解在这个例子中,嵌套在images表中的用户id会被分类为外键吗?为什么要将图像名称存储在user表中?您不会将图像id存储在其中,因为user_id是外键。但是,我认为默认的图像ID是正确的:)