PostgreSQL在表A中为表B中的每条记录插入一条记录

PostgreSQL在表A中为表B中的每条记录插入一条记录,sql,postgresql,Sql,Postgresql,我有三个表,检查表,检查表项目和检查表项目类型。我希望在我的计划工作中,在检查表项目中为符合条件的检查表项目类型中的每个记录插入一条记录(处于活动状态列为真) 这是我的检查表表格: id checklist_date notes 1 "2018-07-23" "Fixed extra stuff" 2 "2018-07-24" "These are some extra notes" 3 "2018-07-25" "Notes notes" 这是我的检查表\u

我有三个表,
检查表
检查表项目
检查表项目类型
。我希望在我的计划工作中,在
检查表项目
中为符合条件的
检查表项目类型
中的每个记录插入一条记录(
处于活动状态
列为

这是我的
检查表
表格:

id  checklist_date  notes
1   "2018-07-23"    "Fixed extra stuff"
2   "2018-07-24"    "These are some extra notes"
3   "2018-07-25"    "Notes notes"
这是我的
检查表\u项目
表,数据缩减:

id  checklists_id  checklists_item_types_id  is_completed
1   1              1                         false
2   1              2                         true
3   1              3                         true
...
34  2              16                        true
35  2              17                        true
36  2              18                        true
这里是
检查表项目类型
,数据减少(例如,假设所有
都处于活动状态
都是
正确的
,但15个除外):

因此,当我的作业运行时,我希望
检查表项目
通过上面的示例获得17条新记录(18个
检查表项目
类型减去1,因为
为false
处于活动状态

作业运行一次后的“新建”
检查表项目将如下所示:

id  checklists_id  checklists_item_types_id  is_completed
1   1              1                         false
2   1              2                         true
3   1              3                         true
...
34  2              16                        true
35  2              17                        true
36  2              18                        true
---new data starting below---
37  3              1                         false
38  3              2                         false
39  3              3                         false
40  3              4                         false
41  3              5                         false
42  3              6                         false
43  3              7                         false
44  3              8                         false
45  3              9                         false
46  3              10                        false
47  3              11                        false
48  3              12                        false
49  3              13                        false
50  3              14                        false
51  3              16                        false
52  3              17                        false
53  3              18                        false

您似乎想要
插入。选择

insert into checklist_items (checklists_id, checklists_item_types_id, is_completed)
    select 3, cit.checklists_item_types_id, false
    from checklist_item_types cit;

我建议创建与数据库通信的类。下面是一个类的一部分,用于提取所需的清单项目类型。如您所见,在database.php文件中需要另一个类“DatabaseConn”来打开与数据库的连接。您将需要一些PHP代码来调用此函数以及要添加到checklist_items表中的函数

<?php
require_once("model/database.php");
class checklist_item_types extends DatabaseConn
{
...
    public function get_records_by_id_and_completed($starting_id, $is_completed) {
        global $dbConn;
        $sql = "SELECT * FROM checklist_item_types 
           WHERE id >= $starting_id AND is_completed = $is_completed";
        try {
            $statement = $dbConn->prepare($sql);
            $statement->execute();
            $result = $statement->fetchAll();
            $statement->closeCursor();
            return $result;
        } catch (PDOException $e) {
            echo $sql . "<br>" . $e->getMessage();
        }
    }
...
}
?>


您面临的挑战是什么?你尝试了哪些选择?我们强烈鼓励在论坛请求帮助之前记录您的尝试和挑战。我如何让
检查表\u id
也匹配?您的问题没有解释如何获取id,这就是为什么它是硬编码的。也许你应该问另一个问题。
<?php
require_once("model/database.php");
class checklist_item_types extends DatabaseConn
{
...
    public function get_records_by_id_and_completed($starting_id, $is_completed) {
        global $dbConn;
        $sql = "SELECT * FROM checklist_item_types 
           WHERE id >= $starting_id AND is_completed = $is_completed";
        try {
            $statement = $dbConn->prepare($sql);
            $statement->execute();
            $result = $statement->fetchAll();
            $statement->closeCursor();
            return $result;
        } catch (PDOException $e) {
            echo $sql . "<br>" . $e->getMessage();
        }
    }
...
}
?>