将多个值插入同一列

时间:2016-06-27 11:16:16

标签: mysql

我有一个我正在建设的网络应用程序。这个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

3 个答案:

答案 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列进行规范化,并以这种方式将每张照片存储在一行中