【问题标题】:SQL - Inserting multiple row values into a single columnSQL - 将多个行值插入单个列
【发布时间】:2011-06-14 12:13:48
【问题描述】:

我需要有关将值插入不同行的单个列的方法的帮助。

现在,我有一个内爆数组,它给了我这样的值:

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

这些数字是我希望插入数据库的新 ID。
我用来内爆数组的代码是这样的:

$combi = "('".implode("', '",$box)."')"; // 其中 $box 是初始数组

我打算使用的查询卡在这里:

mysql_query("INSERT INTO studentcoursedetails (studentID)

一个选择是重复这个,但我不能,因为数组会循环;可能有 3 个 ID,也可能有 20 个。
循环似乎不对。任何帮助将不胜感激。

【问题讨论】:

标签: php sql arrays insert implode


【解决方案1】:

要在一个表中插入多个值,您应该使用 (value1), (value2) 语法:

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

PS:此功能称为行值构造函数,从 SQL-92 开始提供

【讨论】:

  • Oracle 是否完成了 SQL-92 的实施? SQL Server 仅从 2008 年起支持 values(..),(..)
  • 不要认为他们会为此添加新语法。在 oracle 中已经有两种方法可以做到这一点,我在这里找到了:stackoverflow.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 函数的变体将对数组参数进行操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-17
          • 2013-01-05
          • 2015-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          相关资源
          最近更新 更多