Имплантировать 2 отдельных массива?

#php #mysql #sql #implode

#php #mysql #sql #имплантировать

Вопрос:

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

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

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

Комментарии:

1. Не было бы лучше использовать SELECT INTO? Что-то вроде ВЫБОРА t1.field1, t2.field2 В new_table ИЗ <join-statement> . Однако, если вы не реструктурируете / архивируете, представление было бы еще лучше.

Ответ №1:

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

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

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

Ответ №2:

Использовать:

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

Тем не менее, обычно хранить денормализованные данные — не лучшая идея.

Комментарии:

1. Я согласен с OMG Ponies, в лицо я бы сказал, что эти элементы принадлежат к собственной таблице, поэтому они связаны