数据库列Varchar Int困境

时间:2014-02-03 11:40:59

标签: database string insert int

我有食谱的错误,

配方相关> recipecomponent< -component

如果我插入含有配料的配方,我会在配方和组件表上插入,然后将两者的ID插入,然后将其插入中间表。

所以中间表有2个col,它们是表的外键,PK是其他2个表,它们是Auto Increment int类型。

现在的问题是,如果我插入含有2种成分的配方,因为我会在组件上插入2行,这意味着我需要将2个ID从组件插入配方组件。

例如。

说,我刚刚插入了含有2种成分的食谱,

当我在食谱中插入时,id为1(AI,INT)。 因为它有2种成分,我将2插入组件中。 应该有1(AI,INT)和2(AI,INT)。

然后我必须将这些ID(对于2个表的PK)作为FK插入中间表。

预期行将在recipecomponent表上

recipeid - componentid

1   ||    1 2

如何在组件ID上插入。我用数组插入它吗?

$insert_row = array('recipeid'=>$recipeid,'componentid'=>componentids);

假设componentids是一个包含来自组件表的1,2个ID的数组。

这没问题,但是当你尝试插入它时。它将在值中显示为ARRAY,它会发出错误

  

严重性:注意

     

消息:数组到字符串转换

     

文件名:mysqli / mysqli_driver.php

     

行号:553

  

错误号码:1054

     

'字段列表'中的未知列'数组'

     

INSERT INTO recipecomponentrecipeidcomponentid)VALUES(1,   阵列)

     

文件名:C:\ www \ KG \ system \ database \ DB_driver.php

     

行号:330

我找到了解决方法,但我将其转换为带有内爆的字符串

$new_component_id = implode(' ',$componentid);

但是因为它现在是一个字符串“1 2”,当我将它插入到一个int类型的列时,它只在行中显示第一个数字为1。

我想过单独插入。对于只含2种成分的配方,这没有问题。

就像这样:

recipeid - componentid

  

1 || 1

     

1 || 2

但是我说我插入了一个含有至少4种成分的食谱,还有更多要插入的食谱。记忆会浪费吗?

如果是这样,我在想是否有任何字符被认为是一个整数但被接受为插入的值,假设字符 -

所以当我插入字符串1-2时,它会在我的col上显示为1-2,这是一个int类型。

我需要一些专业的帮助和建议。

1 个答案:

答案 0 :(得分:0)

最后一个选项,每个成分一个记录,是正确的方法。这就是桥表“recipecomponent”的用途。

在同一列中插入多个值(如第一个示例中所示)是针对normalisation的(同样,这就是桥接表的用途)。更重要的是,当您查询特定的id时,在不同记录上使用ID比分析具有多个ID的字符串更快。

$ new_component_id会发生什么(即第二个id被切断)可能是因为某些数据类型转换(无论是在数据库端发生,还是在PHP端,都不是您报告的问题所在)。

如果您只想使用一个查询插入多个成分,可以使用以下语法:

INSERT INTO recipecomponent (recipeid, componentid) VALUES (1,1), (1,2), (1,3);