2011-05-06 61 views
1

我有一個查詢腳本,使用連接從兩個單獨的表中收集數據庫的信息。現在我想將這兩個數組和它們的值並排插入一個新表中。Implode 2獨立陣列?

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

很明顯,語法是不正確的,但我想知道如果這是可能的,或者如果我在錯誤的軌道上。我嘗試了幾個查詢,並且無法讓他們排隊插入 - 它一次爆炸了他們。

+0

使用SELECT INTO會不會更好?類似於SELECT t1.field1,t2.field2 INTO new_table FROM 。但是,如果您不重組/歸檔,VIEW會更好。 – 2011-05-07 01:47:30

回答

3

這個答案正如你所期望的那樣,完全取決於你試圖達到的目標。

我會假設你的兩個數組如下(爲示範的目的):

$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

用途:

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

也就是說,通常不是個好主意來存儲非規範化的數據。

+0

我同意OMG小馬,面對我會說這些物品屬於有自己的表,所以他們是相關的 – mcgrailm 2011-05-06 23:53:01