2014-04-04 33 views
-1

我有以下數據庫關係:明智的方法插入多行?

|--------|    |-----------------|   |-------| 
| Groups | ------- 1.* | GroupMembership | *.1------- | Users | 
|--------|    |-----------------|   |-------| 

我在組的組ID,在用戶的用戶ID和兩者的組成員身份,從而使組和用戶之間的關係。

一個在GroupMembership記錄看起來像:

GroupID | UserID | datetime 

我有一個數組從看起來像這樣一種形式發佈:

["members"]=> array(5) { 
          [0]=> "175" 
          [1]=> "113" 
          [2]=> "122" 
          [3]=> "80" 
          [4]=> "161" 
} 

每個值(175,113等)是一個用戶名。我需要爲該數組中的每個ID在GroupMembership表中插入一個新行。如何在不從數據庫和服務器資源中踢出屁股的情況下實現這樣的任務?

在此先感謝!

+0

等待,直到最後一分鐘的功課,對吧? –

+2

不是,我是一名工作人員,全職,我稱自己是一名學生,因爲我是自我教導,並且更容易說我是一名學生,而不是解釋我是一名想學習PHP的極客: ) – Arbiter

+0

即使安塞爾·亞當斯認爲自己是一個「學生」*(藝術)* ;-) –

回答

3

INSERT聲明不會殺死你的服務器。下面是一些你可以這樣做:

["members"]=> array(5) { 
     [0]=> "175" 
     [1]=> "113" 
     [2]=> "122" 
     [3]=> "80" 
     [4]=> "161" 
} 

$db = new PDO('mysql:host=localhost;dbname=yourdbname', $user, $password); 
$statement = $db->prepare(" 
     INSERT INTO GroupMembership(GroupID, UserId) VALUES (
      :__group_id, 
      :__user_id 
     ) 
    "); 

$statement->bindParam(':__group_id', $DEFAULT_GROUP_ID, PDO::PARAM_INT); 
$statement->bindParam(':__user_id', $user_id, PDO::PARAM_INT); 
for($i = 0; $i < count($members); $i++) { 
    $user_id = $members[$i]; 
    $DEFAULT_GROUP_ID = <your_group_id> 
    $statement->execute(); 
} 

mysqli的版本

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
$stmt = $mysqli->prepare(" 
     INSERT INTO GroupMembership(GroupID, UserId) VALUES (
      ?, 
      ? 
     ) 
") 
for($i = 0; $i < count($members); $i++) { 
    $user_id = $members[$i]; 
    $stmt->bind_param('ii', $DEFAULT_GROUP_ID, $user_id); 
    $stmt->execute(); 
} 
$stmt->close(); 
+0

「4插入語句不會終止您的服務器。」我不打算在這裏列出整個陣列,可以定期向不同SaaS實例的相同數據庫請求多達500多個插入。還有...爲什麼PDO哈哈我還沒有看過PDO,我可以很厚臉皮並要求MySQLi版本來玩嗎?感謝PDO示例,儘管我可以看到你正在做什麼的登錄。 – Arbiter

+0

在這種情況下,您需要查看一個FIFO隊列。 500個插入物對任何事物都很重要。我將執行mysqli版本 –

+0

不管MySQLi如何管理FIFO?通過執行插入咀嚼?有沒有辦法做到這一點,而無需循環通過INSERT查詢或「多個查詢」功能實際上不存在? (我看了,但找不到太多) – Arbiter