2017-06-02 101 views
1

我試圖得到一個表的結果,並將其插入到另一個表。結果是用戶標識。這段代碼應該可以工作,但不會。插入結果循環

$query1 = "SELECT id FROM users";       
$select1 = $db->prepare($query1); 
$select1->execute(array()); 
foreach($select as $index => $rs) { 

    $users = $rs['id']; 

    // the results are 1,2,3,4,5,6,7,8... (the user id's) 

} 



// Here below, I want to add the results into another table... 

foreach ($users as $row){ 
    $query2 = "INSERT INTO validateuser (userid) VALUES (".$row.")"; 

    $select2 = $db->prepare($query2); 
    $select2->execute(array()); 
} 

回答

2

這對我來說似乎過於複雜。爲什麼不讓數據庫完成數據庫最擅長的工作 - 處理數據,並在單個insert-select語句中執行此操作?

INSERT INTO validateuser (userid) 
SELECT id FROM users 

編輯:
要回答在意見中提出的關注,'validated'值可以被選擇作爲文字:

INSERT INTO validateuser (userid, validated) 
SELECT id, 'validated' FROM users 
+0

INSERT INTO的ValidateUser(用戶ID) SELECT ID FROM用戶?我從來沒有見過像這樣的查詢。你什麼意思?如何在一個查詢中輸入我想要的全部內容? –

+1

@ J.Doe準確。您可以在[MySQL的文檔](https://dev.mysql.com/doc/refman/5.7/en/insert-select.html)中瞭解更多信息。 – Mureinik

+0

因爲我有其他值可以在其他表中輸入列。所有用戶必須在第二列上插入一個名爲「已驗證」的文本。這必須適用於所有用戶標識。你的代碼有效,但我不知道我是否可以按照你的建議做我想做的事。 –

1

當你迭代第一次查詢的結果與foreach($select as $index => $rs) ,您將$users設置爲$users = $rs['id'];的每行結果的ID。

在你的循環結束,$users將包含最後一排的ID,因爲它每次都被覆蓋。它不是可迭代的(它是一個int),因此foreach ($users as $row){沒有意義。

你大概的意思做$users[] = $rs['id'];代替。但是,如果你只是將它們全部插入,那麼你可以像其他答案所暗示的那樣在一個查詢中進行。