将PHP数组插入两个MySQL表中


Insert PHP array into two MySQL tables

我想知道将多维值数组插入数据库的最佳方法 - 特别是两个表?我创建了以下 foreach 循环,该循环创建一个将所有记录插入到一个表中的查询:

foreach($newPosts as $value) {
            if(!isset($postQuery)) {
                $postQuery = "INSERT INTO posts (primay_key, col1, col2, col3, col4) VALUES ('$value[0]', FROM_UNIXTIME($value[4]), '$value[2]', '$value[1]', '$value[3]')";
            } else {
                $postQuery .= "('$value[0]', FROM_UNIXTIME($value[4]), '$value[2]', '$value[1]', '$value[3]')";
            }
    }

我想将其中一个值存储在一个单独的表中,因为该值特别大并且该行的格式为 Longtext。查询数据库时也很少调用此值。我假设将其移动到第二个表中会提高第一个表的查询速度?这是对的吗?

如果我将此值移动到第二个表中,我想将表与第一个表中的primary_key链接,这是一个自动递增值。如何遍历此多维数组并将数据插入两个表中,同时将第一个表的primary_key插入第二个表?我知道如果我一次运行一个查询,我可以使用 LAST_INSERT_ID()。不过,某些更新会插入数百行,所以我不想这样做。

提前感谢!

我假设将其移动到第二个表中会提高第一个表的查询速度?这是对的吗?

不一定。它只会影响性能

  • 如果大列被索引(这不太可能,因为MySQL限制了索引字段的大小)
  • 如果您的查询定期执行全表扫描
  • 如果该值在大部分情况下为 null(超过大约三分之一)

正如您所说,通过将多插入拆分为 2 个表,您将失去多插入的好处。因此,正如您所建议的,您唯一的选择是一次插入一条记录并读回插入 ID,或者(具有大量代码和复杂性)使用序列生成器并预分配多个记录 ID。