我有一个我正在建设的网络应用程序。这个webapp将输入一些产品(汽车,摩托车,船只,房屋等......),每个产品将有一个或多个与之相关的照片。每张照片的id由php的uniqid()
函数生成。
我的问题是:我似乎不能将两个id_photos
放入同一列
+-----------+------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------------------------------+------+-----+---------+----------------+
| carid | int(11) | NO | MUL | NULL | auto_increment |
| brand | enum('Alfa Romeo','Aston Martin','Audi') | NO | | NULL | |
| color | varchar(20) | NO | | NULL | |
| type | enum('gasoline','diesel','eletric') | YES | | NULL | |
| price | mediumint(8) unsigned | YES | | NULL | |
| mileage | mediumint(8) unsigned | YES | | NULL | |
| model | text | YES | | NULL | |
| year | year(4) | YES | | NULL | |
| id_photos | varchar(30) | YES | | NULL | |
+-----------+------------------------------------------+------+-----+---------+----------------+
我想要发生的事情是这样的:INSERT INTO cars(id_photos) values ('id_1st_photo', 'id_2nd_photo')
结束这样的事情:
| 60 | Audi | Yellow | diesel | 252352 | 1234112 | R8 | 1990 | id_1st_photo id_2nd_photo |
最终,我必须从他们所在的文件夹中抓取这些照片:/var/www/website/$login/photos/id_of_photo
并带有查询select id_photos from cars where carid=$id
。
您可能会发现某些data types
对于服务器将收到的数据不是很好,但我已经进入mysql一周了,我后来会担心data types
首先,我不知道这是否可能,如果不是我怎么能设计出像这样的东西呢?
我发现这个问题与我的问题完全一样,但我似乎无法实现这样的事情:add multiple values in one column
答案 0 :(得分:2)
您可以将连接的值插入到字段中。但这不是一个好习惯。您可以使用具有父表的id的外键创建另一个表。
答案 1 :(得分:1)
您可以轻松地在链接问题中调整方法,甚至删除所需的一个表:
您的第一个表几乎保持不变,但删除了id_photos
列:
+-----------+------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------------------------------+------+-----+---------+----------------+
| carid | int(11) | NO | MUL | NULL | auto_increment |
| brand | enum('Alfa Romeo','Aston Martin','Audi') | NO | | NULL | |
| color | varchar(20) | NO | | NULL | |
| type | enum('gasoline','diesel','eletric') | YES | | NULL | |
| price | mediumint(8) unsigned | YES | | NULL | |
| mileage | mediumint(8) unsigned | YES | | NULL | |
| model | text | YES | | NULL | |
| year | year(4) | YES | | NULL | |
+-----------+------------------------------------------+------+-----+---------+----------------+
然后,您将添加第二个表来存储指向照片ID的链接:
+-----------+------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------------------------------+------+-----+---------+----------------+
| carid | int(11) | NO | MUL | NULL | |
| id_photos | varchar(30) | NO | | NULL | |
+-----------+------------------------------------------+------+-----+---------+----------------+
两个表都由字段carid
链接(您甚至应该在第二个表中为carid
指向第一个表中的外键。)
然后每个id_photos
会在第二个表中生成一个新行。
要查询数据,您可能需要在两个表之间使用JOIN
,并且可能需要GROUP BY
以将结果再次减少到每行carid
一行,但这取决于其他用例。
答案 2 :(得分:0)
您可以插入格式化多个照片名称的字符串
INSERT INTO cars(id_photos) values ('id_1st_photo, id_2nd_photo')
通过这种方式,你没有很好的规范化数据库结构,所以你在回复单音照片名称时遇到问题。
我建议您参照master表对separata表中的id_photo列进行规范化,并以这种方式将每张照片存储在一行中