Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 单查询选择传播到child_Php_Sqlite - Fatal编程技术网

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,则需要遍历结果行并创建数组。或如果添加其他列,结果数组可能就是所需的数组。;)我没有测试这个语法,但是双单引号(“”)允许在字符串中使用单引号,并且| |连接两个字符串。