SQL - 将多个行值插入单个列
Posted
技术标签:
【中文标题】SQL - 将多个行值插入单个列【英文标题】:SQL - Inserting multiple row values into a single column 【发布时间】:2011-06-14 12:13:48 【问题描述】:我需要有关将值插入不同行的单个列的方法的帮助。
现在,我有一个内爆数组,它给了我这样的值:
('12', '13', '14')
这些数字是我希望插入数据库的新 ID。 我用来内爆数组的代码是这样的:
$combi = "('".implode("', '",$box)."')"; // 其中 $box 是初始数组
我打算使用的查询卡在这里:
mysql_query("INSERT INTO
studentcoursedetails
(studentID
) 值
一个选择是重复这个,但我不能,因为数组会循环;可能有 3 个 ID,也可能有 20 个。 循环似乎不对。任何帮助将不胜感激。
【问题讨论】:
您应该使用循环和规范化数据库。包含多个值的列未标准化。 一个循环正是你应该如何解决这个问题,请参阅php.net/manual/en/control-structures.foreach.php 【参考方案1】:要在一个表中插入多个值,您应该使用 (value1), (value2) 语法:
$combi = "('".implode("'), ('",$box)."')";
PS:此功能称为行值构造函数,从 SQL-92 开始提供
【讨论】:
Oracle 是否完成了 SQL-92 的实施? SQL Server 仅从 2008 年起支持 values(..),(..) 不要认为他们会为此添加新语法。在 oracle 中已经有两种方法可以做到这一点,我在这里找到了:***.com/questions/883706/…【参考方案2】:你不能这样做吗:
for($x = 0; $x < count($box); $x++)
mysql_query("INSERT INTO studentcoursedetails (studentID) VALUES ($box[$x]);
这将直接在您的数组上运行,为 $box 中的每个值插入一个新行,并且还可以避免将数组内爆为逗号分隔的字符串
将 id 存储为逗号分隔的字符串最初可能看起来像一个简单的模型,但从长远来看,这会给您在尝试使用非规范化数据库时带来无穷无尽的麻烦。
【讨论】:
实际上,cyberkiwi 的建议更好,因为这只需要 1 个 DB 调用,而我的需要数组中的许多值。两者都实现了完全相同的目标,但cyberkiwis 解决方案会在PHP 和MySQL 中产生更少的负载。【参考方案3】:某些风格的 sql 允许复合插入:
insert into studentcoursedetails (studentid) values
(1),
(2),
(3),
【讨论】:
【参考方案4】:如果你使用的是 MySQL,你可以在一个句子中插入多个值:
sql> insert into studentcoursedetails (studentID)
> values (('12'), ('13'), ('14'));
所以,您只需在 PHP 中构建该字符串即可。
【讨论】:
【参考方案5】:您仍然可以通过 implode 创建语句。只是不要使用价值;改用 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 - 如果它们是数字,请不要引用它们。
【讨论】:
【参考方案6】:检查是否有 mysql_query 函数的变体将对数组参数进行操作。
【讨论】:
以上是关于SQL - 将多个行值插入单个列的主要内容,如果未能解决你的问题,请参考以下文章
SAP HANA SQL - 将单个列的多个结果行合并为单个行
从单个df中提取列信息并输入到标识符需要重新映射的多个dfs