2011-01-24 74 views
5

我需要将值插入不同行的单列中的方法。SQL - 将多行值插入到单列中

现在,我有一个内爆阵列,让我一个值,如本:

( '12', '13', '14')

这些数字的我希望插入到数据库中的新ID。
我使用内爆的阵列中的代码是这样的:

$ COMBI = “( '” .implode( “ ''”,$盒) “')”; //其中$箱是最初的数组

其中我打算使用此卡查询:

的mysql_query(” INSERT INTOstudentcoursedetailsstudentIDVALUES

一个选项是重复这个,但我不能,因为数组会循环;可能有3个ID,可能有20个。
循环看起来不正确。任何帮助,将不胜感激。

+1

您应该使用循环和_normalized_数据库。包含多个值的列未标准化。 – Oded 2011-01-24 12:56:29

+0

一个循环正是你应该如何解决这个问题,请参阅http://php.net/manual/en/control-structures.foreach.php – Andomar 2011-01-24 12:56:41

回答

3

为了插入多个值到你应该使用一个表(值),(值2)语法:

$combi = "('".implode("'), ('",$box)."')"; 

PS:这个功能称为行值构造并可用,因为SQL-92

2

你能不能做这样的事情:

for($x = 0; $x < count($box); $x++) 
{ 
    mysql_query("INSERT INTO studentcoursedetails (studentID) VALUES ($box[$x]); 
} 

这将直接在阵列上运行,插入新行于$框中的每个值,也防止需要爆数组分隔逗号串

存储ID作为一个逗号分隔的字符串开始可能看起来像一个简单的模型,但在长期的努力与非规范化的数据库在工作的时候,这将导致你后患无穷。

+0

其实cyberkiwi的建议更好,因为这只需要1个数据库调用,而我会需要然而数组中有很多值。两者完全相同,但cyberkiwis解决方案将在PHP和MySQL中创建更少的负载。 – MrEyes 2011-01-24 13:03:55

1

您仍然可以通过implode创建语句。只是不要使用VALUES;使用SELECT代替

$combi = " ".implode(" UNION ALL SELECT ",$box)." "; // Where $box is the initial array 
mysql_query("INSERT INTO studentcoursedetails (studentID) SELECT " . $combi) 

SELECT .. union可以在许多dbms中移植。

有关ID的注意事项 - 如果它们是数字,请不要引用它们。看

0

检查是否有请求mysql_query函数,将上一个数组参数操作的变体。

2

一些SQL口味让复合刀片:

insert into studentcoursedetails (studentid) values 
    (1), 
    (2), 
    (3), 
2

如果你正在使用MySQL,你可以插入一个句子多个值:

sql> insert into studentcoursedetails (studentID) 
    > values (('12'), ('13'), ('14')); 

所以,你只需要构建 PHP中的字符串,你就完成了。