Имплозировать 2 отдельных массива? - PullRequest
1 голос
/ 07 мая 2011

У меня есть скрипт с запросом, который собирает информацию из БД из двух отдельных таблиц, используя соединение.Теперь я хочу вставить эти 2 массива и их значения рядом в новую таблицу.

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

Очевидно, что синтаксис неправильный, но мне было интересно, возможно ли это, или янеправильный путь.Я попробовал несколько запросов и не смог заставить их выстроиться в очередь для вставки - он взорвал их по одному за раз.

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

Ответ на этот вопрос, как и следовало ожидать, зависит от того, чего именно вы пытаетесь достичь.

Я предполагаю, что ваши два массива следующие (для целей демонстрации):

$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" )

И PHP для создания этого SQL может быть

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

Теперь, если бы вы вместо этого хотелисоздать набор совпадающих строк, по одной паре из каждого из двух массивов, например:

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 ) );
0 голосов
/ 07 мая 2011

Использование:

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

При этом, как правило, не очень хорошая идея хранить денормализованные данные.

...