2017-06-02 107 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'];代替。但是,如果你只是将它们全部插入,那么你可以像其他答案所暗示的那样在一个查询中进行。