我有食谱的错误,
配方相关> 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
recipecomponent
(recipeid
,componentid
)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类型。
我需要一些专业的帮助和建议。
答案 0 :(得分:0)
最后一个选项,每个成分一个记录,是正确的方法。这就是桥表“recipecomponent”的用途。
在同一列中插入多个值(如第一个示例中所示)是针对normalisation的(同样,这就是桥接表的用途)。更重要的是,当您查询特定的id时,在不同记录上使用ID比分析具有多个ID的字符串更快。
$ new_component_id会发生什么(即第二个id被切断)可能是因为某些数据类型转换(无论是在数据库端发生,还是在PHP端,都不是您报告的问题所在)。
如果您只想使用一个查询插入多个成分,可以使用以下语法:
INSERT INTO recipecomponent (recipeid, componentid) VALUES (1,1), (1,2), (1,3);