1

結合を使用して2つの別々のテーブルからデータベースから情報を収集するクエリを含むスクリプトがあります。次に、これら2つの配列とその値を新しいテーブル内に並べて挿入します。

$query = "INSERT INTO `new_table` 
            (column_a, column_b) 
          VALUES 
            (implode(something,$array_a), implode(something,$array_b))"

明らかに構文は正しくありませんが、それが可能かどうか、または間違った方向に進んでいるかどうか疑問に思いました。私はいくつかのクエリを試しましたが、挿入のためにそれらを並べることができませんでした-それは一度にそれらを爆発させました。

4

2 に答える 2

3

これに対する答えは、ご想像のとおり、達成しようとしていることによって異なります。

2つのアレイは次のとおりであると想定します(デモンストレーションの目的で)。

$arrayA = array(
  'Alpha' ,
  'Bravo' ,
  'Charlie'
);
$arrayB = array(
  'Zulu' ,
  'Yankee' ,
  'Xray'
);

ここで、これらの値をテーブル(参照しやすいようにthe_tableと呼びます)に配置する場合は、次のように単一の行を作成します。

column_a              | column_b
"Alpha,Bravo,Charlie" | "Zulu,Yankee,Xray"

次に、生成するSQLは次のとおりです。

INSERT INTO `the_table` ( `column_a` , `column_b` )
VALUES ( "Alpha,Bravo,Charlie" , "Zulu,Yankee,Xray" )

そして、そのSQLを生成するPHPは

$sqlTpl = 'INSERT INTO `the_table` ( `column_a` , `column_b` )
           VALUES ( "%s" , "%s" )';
$sqlStr = sprintf( $sqlTpl ,
            implode( ',' , $arrayA ) ,
            implode( ',' , $arrayB ) );

代わりに、2つの配列のそれぞれから1つのペアを使用して、一致する行のセットを作成したい場合は、次のようになります。

column_a  | column_b
"Alpha"   | "Zulu"
"Bravo"   | "Yankee"
"Charlie" | "Xray"

SQLは

INSERT INTO `the_table` ( `column_a` , `column_b` )
VALUES ( "Alpha" , "Zulu" ) ,
       ( "Bravo" , "Yankee" ) ,
       ( "Charlie" , "Xray" )

そしてそれを生み出すPHPは

$sqlTpl = 'INSERT INTO `the_table` ( `column_a` , `column_b` )
           VALUES ( %s )';
$sqlArr = array();
foreach( $arrayA as $k => $v )
  $sqlArr[] = '"'.$arrayA[$k].'" , "'.$arrayB[$k].'"';
$sqlStr = sprintf( $sqlTpl ,
            implode( ' ) , ( ' , $sqlArr ) );
于 2011-05-07T10:03:38.350 に答える
0

使用する:

$query = sprintf("INSERT INTO `new_table` 
                    (column_a, column_b) 
                  VALUES 
                    ('%s', '%s')",
                  implode(something, $array_a),
                  implode(something, $array_b));

とは言うものの、通常、非正規化されたデータを保存するのは良い考えではありません。

于 2011-05-06T23:46:43.057 に答える