0

テーブル Y と Z を含むデータベース X があります。Y には、W という列があります。これには、コンマで区切られたデータが含まれています。私がやりたいことは、Y を通過し、W でデータを分割し、存在しない場合は Z に挿入することです。

MySQL データベースを使用しています。ヘルプ?

編集。より具体的には、もう少し情報を提供します。W には、0 から数百までの項目をコンマで区切って含めることができます。それらが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 に達する可能性があります。この場合、一度に数千のレコードを挿入できます。

UNIQUE KEYまた、オンにする必要があることを忘れていましvalueZ

于 2012-07-23T17:21:30.290 に答える