0

我有一个数据库 X,其中包含表 Y 和 Z。在 Y 中,我有一个名为 W 的列。它包含用逗号分隔的数据。我想要做的是通过 Y,在 W 中拆分数据,如果不存在则将其插入 Z。

我正在使用 MySQL 数据库。帮助?

编辑。更具体地说,我给你更多的信息。W 可以包含从零到数百的逗号分隔的项目。我希望代码检查它们是否存在于 Z 中。如果它们不存在,它将把它们插入 Z 中,每个人在自己的记录中用逗号分隔。因此,W 中的数据“a,b,c”看起来像 Z 中的“a”、“b”、“c”,都在它们自己的记录中。

4

1 回答 1

2

这应该在您放置正确的主机、用户、密码、数据库、表格后执行...

<?php

$conn = new mysqli('some_host', 'some_user', 'some_pass', 'some_db');

if ($conn->connect_error) die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);

$zrows = array();

$result = $conn->query("SELECT W FROM Y");

if($result) while ($row = $result->fetch_object()){
    if(!empty($row->W)) foreach(explode(',',$row->W) as $v) $zrows[] = "('".$conn->real_escape_string($v)."')";

}
if(!empty($zrows)) {
    $conn->query("INSERT IGNORE INTO Z (`value`) VALUES ".implode(',',$zrows));
}

如果行数过多,您可能会达到 PHP 的内存限制或 mysql 的 max_packet_size 在这种情况下,您可以一次插入几 1000 条记录

也忘了你需要一个UNIQUE KEYon valueinZ

于 2012-07-23T17:21:30.290 回答