Mysql单元格中的多个值

时间:2017-01-30 18:08:58

标签: mysql database datatable foreign-keys

我正在试图弄清楚如何将某些值作为其他表的外键,但我认为不能这样做。

这是我的例子: 我正在处理一些修复报告。这些报告包含有关已修复的内容以及已更换的组件数量的信息。有一些代码可以修复已修复的故障以及组件。这些代码可以是一个或几个,我想将所有麻烦存储在我的报告表的一列中,但我认为无法完成。

我认为我可以创建一个只包含2列的中间表,报告的ID,然后是故障代码,每个故障都会有一个条目。与组件相同。

这样我就可以知道每个报告的所有麻烦,但是我需要做5个查询来打印报告中的问题和组件。

所以我搜索了是否可以在一个单元格中进行,但只有我得到的信息是使用varchar值然后拆分它们并在表格中查找代码转换,它具有代码,描述,逐个。< / p>

这是实现它的唯一方法,还是不可能从表创建多个引用到其他人?

我肯定你的回答是肯定的,把它做为varchar,但只是为了确定。

P.D:对不起,如果这是一个不好的问题,请点一点。

2 个答案:

答案 0 :(得分:0)

鉴于您刚才所说的情况 - 如您所说 - 您可以创建另一个包含两列的表,一个用于id,另一个用于代码,当然它不会是多余的,因为id + code(代码是当然独特)也将是独一无二的。

您所要做的就是使用您拥有的ID查询其他表中的所有代码。

如果您想以某种方式将代码存储在同一个表中,那么您有两个选择:

  1. 如前所述,将代码存储为varchar值(字符串值),并使用分隔符将这些代码连接在一个字符串中,如下所示:
  2.   

    $ codes = code1。 ','。 code2。 ','。 code3。 ','。 code4 .....等等   上。

    所以你的分隔符是“逗号”,你可以将字符串存储在数据库中,然后检索它并将其爆炸以使用分隔符(逗号)分割代码。但是如果你的字符串由很多代码组成(因此它会很大)使用TEXT而不是varchar ....如果你需要,可以使用LONGTEXT,但首先要自己检查你需要哪种数据类型并对其进行一些搜索

    注意:您可以使用一个简单的数组,而不是使用字符串来连接代码,然后在该数组上使用implode在值之间添加分隔符(分隔符)。但是,如果您不确定您的代码是否包含类似于您的分隔符的内容并且害怕搞砸了,那么请转到下面的第二点。

    1. 第二种方法是将代码存储在一个数组中(使用php),每次获得相同id的新代码时,只需将其添加到数组中,如下所示:
    2.   

      $ arr = array();

           

      $ arr [] = code1;

           

      $ arr [] = code2;

           

      $ arr [] = code3;

      然后(使用php)使用serialize()序列化数组:

      $serialized_arr = serialize($arr);
      

      然后将$ serialized_arr存储到您的数据库中,存储此数据的列必须是TEXT或LONGTEXT类型(或者甚至可能是BLOB)。

      然后,当您有一个要添加的新代码时,只需执行以下操作:

      $unserialized_arr = unserialize($serialized_arr); 
      

      现在你已经从你的数据库中检索了序列化文本,对它进行了未经处理,现在你可以将它(使用php)作为一个数组($ unserialized_arr)处理,只需添加新代码,然后再次序列化并更新你的数据库中。

      当然,您将要反序列化的$ serialized_arr将是存储在数据库中的文本,因此您将首先从数据库中检索它。

      有关要使用的数据类型的详细信息,请参阅以下链接:

      Which mysql column type for serialize(data)?

      度过美好的一天=)

答案 1 :(得分:0)

对我来说,这似乎是一对多的关系。

您可以使用表格来处理报告,使用表格来处理问题,还可以使用表格report_troubles来保存报告和麻烦的外键。

select * from report_problems where report_id = 2这样的单个查询会为您提供所有信息。