在mysql表的同一行中插入多个值

时间:2016-09-29 12:31:29

标签: mysql

需要在同一行中插入多个值,例如我需要插入不同的referrer来为一个site.the表看起来像

|Date |Ref            |Uri
--------------------------
28/9 |ref1 ref2 ref3  |url1

在上表中的相同日期和链接获得了3个不同的推荐人。 如何将引荐来源存储在特定日期的同一行中并检索单个引荐来源。 希望了解我的要求

2 个答案:

答案 0 :(得分:2)

你可以这样做,但你不应该这样做。它与数据库规范化规则相矛盾,您可以在此处看到:https://en.wikipedia.org/wiki/Database_normalization

使用另一个表格,其中包含上表中的主键,并将其与每个参考键连接。例如:

现有表格

T-Id |Date |Uri
--------------------------
1 | 28/9 |url1
2 | 28/9 |url2

新表:

Id | Ref-Id | T-Id
--------------------------
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 1 | 2
5 | 3 | 2

答案 1 :(得分:1)

首先,你不应该这样做。 你不应该像这样在MySQL中保存数据。任何行都不能包含一个列,其中保存了多个值,例如用逗号,空格或其他任何内容分隔。而不是那样,您必须将这些数据分成多行。这样,您可以轻松检索,更新和删除任何行。

但是如果你想保存那样的数据那么你应该选择JSON数据类型。 从MySQL 5.7.8开始,MySQL支持本机JSON数据类型,可以高效访问JSON(JavaScript Object Notation)文档中的数据。

可以使用JSON数组保存。 JSON数组包含由逗号分隔并包含在[和]字符中的值列表:

["abc", 10, null, true, false]

创建表格ex:

CREATE TABLE `book` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    `title` varchar(200) NOT NULL,
    `tags` json DEFAULT NULL,
PRIMARY KEY (`id`)
  ) ENGINE=InnoDB;

插入数据ex:

  INSERT INTO `book` (`title`, `tags`)
  VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
  );

MySql中有许多本机函数可以处理JSON数据类型。

How to Use JSON Data Fields in MySQL Databases

Mysql JSON Data Type

如果referer是一个实体,具有很多属性,那么你可以按照@ rbr94的建议去做。如果referer没有多个属性,那么在多行中分割数据或使用JSON DataType将执行Job。 最后,这取决于您选择的解决方案。