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 - 将单个列的多个结果行合并为单个行

PHP MySQL根据列/行值选择多个表

从单个df中提取列信息并输入到标识符需要重新映射的多个dfs

使用单个过程将多个 xml 数据动态插入到 sql server 表中

使用 php 将多个复选框值和输入插入单个 sql 数据库

使用 PHP 将多个 SQL 列组合成 HTML 表的单个列