Php 单查询选择传播到child
我有以下表格结构:Php 单查询选择传播到child,php,sqlite,Php,Sqlite,我有以下表格结构: id name email child_id <- pointing to id from "child" table id 名称 电子邮件 child_id如果您假设正在处理一个具有自己的名称和id字段的子表,您可以编写 select c.name as child_name, p.name as parent_name from child c join parent p on c.id = p.child_id 我使用以下SQL创建了一个数据库:
id
name
email
child_id <- pointing to id from "child" table
id
名称
电子邮件
child_id如果您假设正在处理一个具有自己的名称和id字段的子表,您可以编写
select c.name as child_name, p.name as parent_name
from child c
join parent p
on c.id = p.child_id
我使用以下SQL创建了一个数据库:
CREATE TABLE "parent" (
"id" INTEGER PRIMARY KEY,
"name" TEXT,
"email" TEXT,
"child_id" INTEGER
);
CREATE TABLE "child" (
"id" INTEGER PRIMARY KEY,
"name" TEXT
);
INSERT INTO parent
(id, name, email, child_id )
VALUES
(1, "Jim", "pineapple@fruit.com", 1 ),
(2, "Jane", "gizmo@gadget.com", 1 ),
(3, "Grover", "monty@python.com", 2 );
INSERT INTO child
(id, name)
VALUES
(1, "Ben" ),
(2, "Samantha" ),
(3, "Carl" );
然后,我的select查询给了我:
然而,这种数据结构限制了您仅对每个家长的孩子进行访问,尽管我为其中一个孩子显示了两个家长。如果您想要其中的多个而不必复制父项,那么您需要为父子关系创建第三个表。该表将有一个父id,一个子id,对于是否需要有自己的id有不同的想法(这使得在关系表中选择特定行变得容易,并且如果关系本身获得了额外的字段,则变得更重要)。您的查询需要将所有表连接到关系表,如果您这样做,则该部分可能如下所示:
from relationship r
join parent p
on p.relation_id = r.parent_id
join child c
on c.relation_id = r.child_id
完美@palu macil,和。。如何获取包含完整父数据的子数组?类似这样:SQLite不直接支持数组。最省力的方法可能是将需要的其他父列添加到select中,然后在应用程序端构建数组。您可以将任何字段放在select with tablename.fieldname中,该字段来自已联接的任何表。请注意,在本例中,我用单字母别名替换了表名以缩短表名,因此我实际上需要使用“p”而不是“parent”。您可以编写类似于选择c.name作为child\u name,p.id作为parent\u id,p.name作为parent\u name,p.email
的内容。AS关键字只是命名列。@intrd实际上,你可以做一些类似于选择c.name作为子级,'array(id='| | p.id | | |',name=''| | p.name |'',email='| p.email | |'')作为父级
的事情,但我几乎愿意打赌这并不是你所希望的,因为这是你想要的文本(不是真正的查询). 如果您使用的是PHP,则需要遍历结果行并创建数组。或如果添加其他列,结果数组可能就是所需的数组。;)我没有测试这个语法,但是双单引号(“”)允许在字符串中使用单引号,并且| |连接两个字符串。