2013-02-07 34 views
0

我有一個數組$members,它包含表users中的一些ID(最多6個數)。使用下面的代碼,我遍歷每個索引$members,搜索細節並將它們存儲在另一個數組中。從另一個SQL表中搜索後在SQL中插入數據數組

 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 & names被存儲在陣列中到另一個表register採用以下格式: (左側是rows在我的表register

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語句?

回答

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])"; 
} 

然後嘗試執行查詢..

0

你做什麼都與陣列,還是你只是從一個表中檢索它以便將其插入另一個表中?

如果是這樣,那麼你可以做這樣的事情。

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

這是因爲運行在一個循環內的查詢是非常糟糕性能。每次運行查詢都會產生開銷,因此一次獲得所有數據意味着您只需支付一次開銷而不是多次。

然後你就可以建立一個語句插入多行:

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

你可以看到,第一種方式,你選擇的地方t並插入一個陳述中,會更好,更容易,所以如果你不對數組做其他事情,那麼我強烈建議你這樣做。

+0

我完全不理解你的答案。你的代碼如何確保細節被插入'mem_1_id','mem_1_name'..等等? – xan

+0

而且,我沒有對數組做任何事情。有一個PHP表單,它接受數組中的'ID' - 將其傳遞到另一個php - >搜索相應的名稱 - >並將它們存儲在另一個表中。 – xan

+0

好吧,如果你使用第一個代碼(一次選擇並插入),那麼它只需要從一個表中的ID和名稱,並把它們放在另一個表中。這不是你想要的,也許我誤解了? (我也編輯了我的答案,以便您可以選擇其他方式獲取數組,然後單獨插入它......但我認爲第一個代碼應該適合您,因爲您的意見)。 – naomi

相關問題