0

テーブルからのいくつか(最大6個)$membersを含む配列があります。次のコードを使用して、の各インデックスをループし、詳細を検索して別の配列に格納します。IDusers$members

        foreach($members as $key=>$value){
            $res = mysql_query("SELECT id,name,email FROM users WHERE id='$value'");
            if ($res === false) {
                echo mysql_error();
                die;
            }
            $row = mysql_fetch_assoc($res);

            if($row['id'])
            {
                $members_name[]=$row['name'];//array for name
            }
        }

次に、配列に格納されているID&を次の形式で別のTABLEに挿入します:(左側は私のTABLEにあります)namesregisterrowsregister

mem_0_id-->$members[0]
mem_0_name-->$members_name[0]
mem_1_id-->$members[1]
mem_1_name-->$members_name[1]
mem_2_id-->$members[2]
mem_2_name-->$members_name[2]
mem_3_id-->$members[3]
mem_3_name-->$members_name[3]
mem_4_id-->$members[4]
mem_4_name-->$members_name[4]

この方法で挿入するにはどうすればよいですか?単一のINSERTステートメントを使用しますか?

4

2 に答える 2

0

配列で他に何かしますか、それとも別のテーブルに挿入するために1つのテーブルから配列を取得するだけですか?

もしそうなら、あなたはこのようにすべてを行うことができます。

$memberIds = implode(',', $members); // comma separated list of member ids
$query = "insert into register (id, name) select id, name from users where id in ($memberIds)";
mysql_query($query); // this will select and insert in one go

アレイをメモリに保持する必要がある場合でも、一度にすべてを取り出すことをお勧めします

$memberIds = implode(',', $members); // comma separated list of member ids
$query = "select id, name from users where id in ($memberIds)";
$res = mysql_query($query);
while ($row = mysql_fetch_assoc($res)) {
    $memberData[] = $row;
}

これは、ループ内でクエリを実行するとパフォーマンスが非常に低下するためです。クエリを実行するたびにオーバーヘッドが発生するため、すべてのデータを一度に取得するということは、このオーバーヘッドを複数回ではなく1回支払うことを意味します。

次に、複数の行を挿入するステートメントを作成できます。

$sql = "insert into register (id, name) values ";
$sql .= "(" . $memberData[0]['id'] . "," . $memberData[0]['name'] . ")";
for($i = 1; $i < count($memberData); $i++) {
    $sql .= ",(" . $memberData[$i]['id'] . ",'" . $memberData[$i]['name'] . "')";
}
mysql_query($sql);

カンマと引用符のために少し厄介ですが、私が正しく行った場合は、

echo $sql;

あなたは次のようなものを手に入れるべきです

insert into register (id, name) values (1, 'john'), (2, 'jane'), (3, 'alice');

1つのステートメントを選択して挿入する最初の方法の方がはるかに優れており、簡単であることがわかります。そのため、配列で他に何もしない場合は、その方法で行うことを強くお勧めします。

于 2013-02-07T17:16:22.260 に答える
0

これを試したことはありませんが、とにかくここに私の答えがあります:)

$query = "INSERT INTO register(id, name) VALUES ($members[0], $members_name[0])";

for($i=1; $i<count($members); $i++)
{
    $query .= ", ($members[$i], $members_name[$i])";
}

次に、クエリを実行してみてください..

于 2013-02-07T16:50:56.397 に答える