【问题标题】:Inserting result of a table into another table with two foreach loops使用两个 foreach 循环将表的结果插入另一个表
【发布时间】:2017-06-02 21:40:19
【问题描述】:

我正在尝试获取一个表的结果并将其插入到另一个表中。结果是用户ID。这段代码应该可以工作,但不能。

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

【问题讨论】:

    标签: php mysql foreach insert entity-relationship


    【解决方案1】:

    这对我来说似乎过于复杂。为什么不让数据库做数据库最擅长的事情——处理数据,并在单个插入-选择语句中执行?

    INSERT INTO validateuser (userid)
    SELECT id FROM users
    

    编辑:
    为了回答 cmets 中提出的问题,可以选择 'validated' 值作为文字:

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

    【讨论】:

    • INSERT INTO validateuser (userid) SELECT id FROM users ?我以前从未见过这样的查询。你是什​​么意思?如何在一个查询中输入我想要的所有内容?
    • @J.Doe 完全正确。您可以在MySQL's documentation 中了解更多信息
    • 因为我有其他值要在同一个表中输入其他列。所有用户都必须在第二列中插入一个名为“已验证”的文本。这必须适用于所有用户 ID。您的代码有效,但我不知道是否可以根据您的建议做我想做的事情。
    • 这太好了。我也可以加入两张桌子吗?例如...Select users.id, 'validated', customers.id from users join customers...这样的事情也可能吗?
    • @J.Doe 是的。无论您在普通的 select 中可以做什么,您也可以在 insert-select 语句中使用。
    【解决方案2】:

    当您使用foreach($select as $index => $rs) 迭代第一个查询的结果时,您将$users 设置为带有$users = $rs['id']; 的结果的每一行的ID。

    在循环结束时,$users 将包含最后一行的 id,因为它每次都会被覆盖。它不可迭代(它是一个 int),所以 foreach ($users as $row){ 没有意义。

    您可能打算改为使用$users[] = $rs['id'];。但是,如果您只是将它们全部插入,那么您不妨像另一个答案所建议的那样,在一个查询中进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      相关资源
      最近更新 更多