[音乐播放] 道格·劳埃德:在我们的视频 关于Web开发的话题, 我们已经提到的概念 数据库几次,对不对? 所以数据库你 可能是熟悉的 说使用Microsoft Excel 或谷歌电子表格。 它实际上只是一个有组织的 设置表,行和列。 而数据库是哪里 我们的网站商店 这一点很重要信息 为我们的网站能正常工作。 此外,一个非常常见的例子在这里 在存储用户名和密码 在数据库中,使得当 用户登录到我们的网站, 该数据库可被查询,看 如果该用户在数据库中存在。 如果是这样,检查 他们的密码是正确的。 而如果他们的密码是正确的, 那么,我们可以给他们任何网页 他们请求。 所以,你很可能再次熟悉 这个想法从Excel或谷歌 电子表格。 我们有数据库, 表,行和列。 这就是真正的排序 基本集 这里分层分解。 因此,这里的Excel电子表格。 如果你曾经开了这 或其他类似的程序 你知道,这些这里有 rows-- 1,2,3,4,5,6,7。 这些都是列。 也许到这里,虽然你可能 不使用此功能非常much-- 我会放大in--我们 这一想法的片材。 因此,也许这些表,如果 我交替往复, 不同的表 存在于我的数据库。 如果我们继续这个例子所有 顺便说一下,这个数据库的名称 是书1。 也许我有第二册和第三册。 所以,每一个Excel文件是一个 数据库中,每个片是一个表, 每个表格里面我有 这一想法的行和列。 那么,如何使用这个数据库的工作? 我如何获得它的信息? 那么有一个叫做语言SQL-- 我通常只是打电话Sequel-- 它代表的是 结构化查询语言。 而且它是一种编程语言, 但它是一个相当有限编程 语言。 这不是很喜欢别人 我们已经合作过。 但这样做的目的 程序设计语言 是查询数据库,以 问一个数据库的信息, 找到一个信息 数据库,等等。 我们在CS50--这是一个非常 共同的平台,这就是所谓的MySQL。 这就是我们在使用过程中使用的。 这是一个开放源码 平台建立 所谓关系型数据库 - 一个数据库,有效。 我们并不需要得到 太多细节 对什么是关系数据库。 但是,SQL语言 非常善于工作 与MySQL和其它类似 样式的关系数据库。 而很多的安装 MySQL的来的东西 所谓的phpMyAdmin,这 是一个图形用户 interface--一个GUI--的 使得它多一点 用户友好的执行 数据库查询, 因为数据库不仅用于 由高级程序员,对吗? 有时有 这些小企业, 他们无法承受 聘请程序员的团队, 但他们仍然需要存储 在数据库中的信息。 类似的phpMyAdmin 使得它很容易为​​别人 谁之前从未编程 拿起和熟悉如何 与数据库一起工作。 问题是,phpMyAdmin的,而 这是一个奇妙的工具,学习 有关数据库,它是手动的。 你将不得不登录 它与执行命令和类型 事情手动研究。 而且,因为我们知道我们的 例如PHP的Web编程, 有做手工 在我们的网站上的东西, 如果我们想要一个充满活力,积极响应 网站,也许不是最好的方法。 我们希望找到一种方法, 也许是自动完成这一莫名其妙。 和SQL将使我们能够做到这一点。 所以,当我们要 开始使用SQL工作, 我们首先需要有一个 数据库一起工作。 创建一个数据库 一些你可能 会做的phpMyAdmin的,因为 你只需要做一次, 和语法这样做 很多更简单。 这是一个更容易做到这一点 在图形用户界面 不是打字它作为一个命令。 该命令可能会变得有些繁琐。 同样,在创建一个表可以 得到相当有点麻烦,以及。 所以像创建数据库 并创建一个表,你 大概只打算做once-- 每一次表,每一次数据库 - 它是确定做,在 图形界面。 在过程中 创建一个表,你会 还必须指定所有的 列,就可以在该表中。 什么样的信息做 要存储在表中? 也许用户的姓名和出生日期, 口令,用户ID号,也许 城市和国家,对不对? 而对于每一次我们要添加一个用户 到数据库中,我们希望得到所有六个 的这些信息。 同时,我们也通过添加 行到表。 因此,我们首先创建一个数据库, 然后我们创建一个表。 作为创建的一部分 一个表中,我们被要求 指定每列 我们希望在此表中。 然后,当我们开始增加 信息到数据库 和查询数据库的更多 generally--不仅仅是增加, 但一切我们 do--我们会处理 与行的表,这是一个 从整组用户的信息。 所以,每一个SQL列能够 保持一个特定数据类型的数据。 因此,我们的排序消除了这种 在PHP中的数据类型的想法, 但他们回到这里SQL。 而且有很多的数据类型。 这里的只有20人,但 它甚至不是所有的人。 因此,我们有一些理念,如INTs-- Integers--我们大概知道 该列可以容纳整数。 而有变化thereon-- SMALLINT,TINYINT,MEDIUMINT,BIGINT。 也许我们并不总是需要四个叮咬。 也许我们需要8个字节,所以我们 可以使用整数这些变化 要多一点空间,高效。 我们可以做的十进制数,我们 可以做浮点数。 这是非常相似的。 有一定的差异, 如果你愿意 想查找 SQL排序指导,你 可以看到轻微 区别是它们之间。 也许我们要存储 关于日期和时间信息。 也许我们跟踪 当用户加入了我们的网站, 所以,也许我们要 有一列的 日期时间或时间戳 表示当用户实际上 注册。 我们可以做的几何形状和线串。 这实际上是很酷。 我们可以绘制出 使用地理区域 GIS坐标绘制出的区域。 所以实际上可以存储排序 在一个SQL列信息。 文本是文本的只是巨大的斑点,也许。 枚举是一种有趣的。 他们实际上存在于C.我们不 谈论他们,因为他们不 非常常用,至少CS50。 但它是一个枚举数据类型, 能够保持限制值。 一个真正很好的例子是 创建一个枚举,其中七 可能的值是星期日,星期一, 周二,周三,周四,周五, 周六,对不对? 对这些数据类型的天 周不存在, 但我们可以创建一个 枚举数据类型, 这列永远只能容纳 其中的一个七个可能的值。 我们列举所有 的可能值。 然后我们有CHAR和VARCHAR, 我已经上色这些绿色 因为我们实际上 要采取第二 谈论的区别 这两件事情之间。 所以CHAR,不像C,其中 CHAR是单个字符, SQL中的CHAR指 一个固定长度的字符串。 而当我们创建这个 专栏中,我们实际上 可以指定字符串的长度。 所以在这个例子中, 我们可以说CHAR(10)。 这意味着,每 该列的元件 将包括10字节的信息。 没有更多,不会少。 因此,如果我们试图把一个15 位或15字符元素 或值此列, 我们只拿到了前10。 如果我们把在两 字符长的值, 我们将有两个 字符,然后8空叮咬。 我们永远不会比这更有效。 一个varchar是一种像 我们一串概念 我们已经很熟悉 从C或从PHP。 这是一个可变长度的字符串。 当你创建 这个专栏中,你只要 指定的最大可能长度。 因此,也许99或通常255。 这将是最大长度。 所以,如果我们存储 15文字串, 我们将使用15个字节,也许16 字节的空终止。 如果我们存储 三个字符的字符串, 我们将使用三个或四个字节。 但是,我们不会使用完整的99。 那么,为什么我们兼得? 那么,如果我们需要弄清楚如何 长的东西是一个VARCHAR, 我们有一种迭代的 通过它就像我们用C做 并找出它停止。 而如果我们知道这一切 在此列是10个字节,也许 我们知道的信息,我们可以跳 10字节,10字节,10字节,10字节, 始终找不到了 开头的字符串。 因此,我们可能有一些 浪费的空间用CHAR, 但也许有一个贸易 关闭有更好的速度 在导航数据库。 但也许我们想要的 VARCHAR类型的灵活性 而不是having--如果我们的CHAR 是255的,但我们的大多数用户 只输入三个或四个字节 的信息价值或三个或四个 字符的信息价值。 但是,一些用户使用 整个255,也许 VARCHAR会比较合适那里。 这有点交易的关闭, 一般为了CS50的, 你不必太担心 无论您使用的是CHAR或VARCHAR。 但在现实世界中,这些东西 做的事,因为所有这些列 占用实际的物理空间。 和物理空间,在 现实世界中,是有溢价。 所以有其他考虑 你建立一个表时, 是选择一列是 什么叫做一个主键。 和主键是一列 其中,每一个值是唯一的。 这意味着,你可以很容易地 挑选出的单行只是看 在该行的主键。 因此,例如,你 通常,与用户, 不想让两个用户谁 具有相同的用户ID号。 所以,也许你有 大量的信息, 也许两个用户 具有相同的name-- 你有约翰·史密斯和约翰·史密斯。 这不一定是一个问题, 因为有多人 在名为约翰·史密斯的世界。 但是,我们只有一个用户ID号 10,一个用户ID号11,12,13。 我们没有两个用户 用相同的号码, 所以也许用户ID号 将是一个好主键。 我们没有任何重复, 我们现在可以唯一地 只是识别每一行 通过查看该列。 选择主键实际上可以 进行后续表操作 轻松很多,因为你可以利用 一个事实,即某些行会 是唯一的,或者某些列 你的数据库或表 将是唯一的挑 出特定的行。 你也可以有一个联合主 密钥,你会发现机会 使用,这仅仅是一个 两列的组合,其 保证是唯一的。 因此,也许你有一个 列的AS和B, 一列这是一个,两个, 三,但你永远只 有一个单一的A 1,单 A2,等等等等。 但是,你可能有一个B2,一 C 2,或A1,A2,A3,A4。 所以,你可能有多个如,多 烧烤,多的,多三三两两, 但你永远只能有一个 单A1,B2,C3等。 所以,正如我所说的,SQL是一种 编程语言, 但它有一个相当有限的词汇。 这是不是很广阔的 C和PHP等语言 我们在谈的过程中。 它是更详细的一 语言比我们 要在此谈谈 视频,因为在这个视频 我们要谈 四则运算我们 可以对表执行。 还有比这更多。 我们可以做的比这更多, 但我们的目的, 我们通常将要使用 短短四年operations--插入, 选择,更新和删除。 你大概可以直观地猜测 什么所有这四个事情要做。 但是,我们将进入一个位 细节上的每一个。 所以为便于这 视频,让我们假设 我们有以下两种 表在单个数据库中。 我们有有一个表称为用户 4 columns-- ID号,用户名, 密码和全名。 我们有一个第二 表在同一数据库中 叫妈妈,只是存储信息 关于用户名和母亲。 因此,对于所有的实施例 在这段视频中,我们将 使用此数据库并 后续更新它。 因此,让我们说,我们要 信息添加到表中。 这就是插入操作做什么。 在解释所有 这些命令,我​​要去 给你一个总体框架来使用。 因为基本上,查询 打算看非常相似, 我们只是要改变 略微不同的信息 做不同的事情与表。 所以对于INSERT,骨架 看起来有点像这样。 我们要插入到 一个特定的表。 然后,我们有一个开放的括号 和列的列表 我们希望把值放入。 关闭括号中, 下面的值,然后 再次,我们列出的值 我们希望把在表中。 这所以一个例子 将是如下。 我想插入到表 用户以下columns-- 用户名,密码和全名。 因此,一个新行,其中我把 在这三列,我们很 打算把在值 纽曼,USMAIL,和纽曼。 因此,在这种情况下,我 把小写纽曼 入用户名栏,密码 USMAIL,并全称资本ñ 纽曼进入全名列。 因此,这里就是数据库 看起来像以前一样。 下面是用户表上 顶级前看着我们这样做等。 当我们执行这个 查询,我们得到这个。 我们增加了一个新行到表中。 但请注意这样一件事 我没有具体说明, 但不知何故,我已经有了一个值 对,这就是这12个就在这里。 我并没有说我想 把ID号在那里。 我希望把用户名, 密码,全称。 而我做了,这很好。 但我也得到了这个12。 为什么我得到这12? 嗯,事实证明, 当你定义 这将是一列你 主键,通常是, 就像我说的,一个ID号。 这并不一定总是 将是一个ID号码, 但它通常是一个好主意 是某种整数值。 你必须在phpMyAdmin的选择 你创建数据库时 或者你的表设置 列自动递增。 这是一个非常好的主意时, 你有一个主键的工作, 因为你想每个值 该列中是唯一的。 如果你忘记指定 它为一个以上的人, 你现在有一个情况 该列不再是唯一的。 你有两个空格,这样你就可以没有 较长的唯一标识一个column-- 或者你可以不再唯一 确定根据该列一行。 它失去了它的所有 值作为主键。 所以显然我做了什么 这里被配置的用户ID 列自动递增,使每个 时间我想补充信息表, 它会自动给我 对于主键的值。 所以,我永远也不会忘记这样做,因为 数据库会为我做的。 所以这是一种很好的。 所以这就是为什么我们得到 12在那里,因为我 设置列设置为自动递增。 如果我加别人 这将会是13,如果我加入 人家这将会是14,依此类推。 因此,让我们只是做一个更多的插入。 我们会插入到妈妈表中, 特别是,用户名和母 列,值 克莱默和巴布斯克雷默。 因此,我们以前有这个。 当我们执行该 SQL查询,我们有这个。 我们增加了克莱默和巴布斯 克莱默向妈妈表。 所以这是插入。 选择是我们用它来提取 从表中的信息。 因此,这是我们如何得到 信息从数据库中。 所以SELECT命令都将是 非常经常用于编程。 一般framework--的 普通的骨架看起来是这样的。 选择一组列 一个表,然后任选 你可以指定一个condition--或 我们通常所说的谓语, 通常我们在SQL中使用的术语。 但它基本上是什么 你要特别行获得。 如果你想要的,而不是获取 一切,缩小它, 这是在那里你会做到这一点。 然后选择性地,你也可以 命令由一个特定的列。 因此,也许你想拥有的东西排序 按字母顺序的基础上一列 按字母顺序或基于另一个。 再次,WHERE和ORDER BY是可选的。 但是,他们很可能会 useful--特别 哪里会是有益的 缩小让你不 让你的整个数据库背部和 必须处理它,你只得到 它的作品,你所关心的。 因此,举例来说,我可能要选择 从用户的ID号和全名。 所以,什么才是这个样子呢? 因此,这里是我的用户表。 我想选择IDNUM 和全名的用户。 我该怎么走? 我要得到这一点。 我并没有缩小它,所以我 获得的ID号的每一行 而我得到的全部 从每列名。 好。 如果我要选择密码 从用户WHERE--所以现在 我加入一个条件,一个predicate-- 其中IDNUM小于12。 因此,这里是我的数据库再次, 我的用户表的顶部。 我该怎么得到,如果我想 选择信息,密码, 其中用户ID或IDNUM小于12? 我要得到这 信息反馈,对不对? 它发生IDNUM是10以下, 超过12,ID号11小于12。 我得到的密码,这些行。 这就是我要的。 那这个呢? 如果我要选择从星 妈妈表其中username等于杰里? OK,选择明星是特 排序外卡的所谓 我们用它来搞定一切。 所以他们说选择 用户名逗号的母亲,这 碰巧是仅 两列此表, 我可以选择星级 并得到一切 其中,用户名等于杰里。 所以这就是我会得到 如果我做了特定的查询。 现在,数据库 伟大的,因为他们允许 我们也许是组织信息 多一点效率比我们 否则可能会。 我们并不一定存储 信息各相关件 大约在同一表的用户。 我们有两个表存在。 我们需要存储 每个人的母亲的名字, 也许我们没有社会保障 数,我们有他们的出生日期。 这并不总是需要 是在同一个表。 只要我们可以定义 在tables--之间的关系 而这也正是这关系 哪种数据库术语起源 进入play--只要我们可以定义 表之间的关系, 之类的,我们可以划分 或抽象事物的方式, 在这里我们只有 真正重要的信息 我们关心用户的表。 然后我们有辅助信息 在其他表或额外的信息 我们可以回到连接到主 用户表中的某个特定的方式。 所以在这里,我们有这两个表,但 有它们之间的关系, 对? 这似乎是用户名 可能是什么 中存在之间的共同 这两个不同的表。 那么,如果我们现在有 的情况下,我们 希望从中获取用户的全名 用户的表,和他们的母亲 从母亲表名? 我们没有办法让 那样子,对不对? 有不包含单个表 双方的全名和母亲的名字。 我们没有这个选项 从我们到目前为止看到的。 因此,我们就来介绍 一个JOIN的想法。 并加入可能 最complex-- 这真是最复杂的操作 我们要谈的视频。 他们是有点复杂, 但一旦你得到了它的窍门, 他们实际上是不是太糟糕。 这只是一个选择的一个特例。 我们要选择一组 加入从表中的列 在一些谓词第二个表。 在这种情况下,考虑一下像this-- 表一是一圈过来, 表二是另一个圈子在这里。 并说明上游部分 在中间,它的 有点像,如果你认为 关于作为一个维恩图,是什么 他们有什么共同点? 我们想链接这两个表 根据他们的共同点 创造这个假设的表 这是两人在一起的合并。 所以我们会看到这一点的 例如,也许这会帮助 它清除掉一点点。 因此,也许你想选择 user.fullname和moms.mother 从用户的加入,在 在任何情况下妈妈表 其中username列 是它们之间的相同。 这是一个新的 语法在这里,这个用户。 和妈妈.. 如果我做多个表 在一起,我可以指定一个表。 我可以在特定的区别 上在最底层那里。 我可以区分用户名 用户表列 从的username列 妈妈表,它是otherwise-- 如果我们刚才说的用户名等于 用户名,并没有真正 意味着什么。 我们想这样做,他们匹配。 所以,我可以指定表和 在壳体的情况列名 哪里会不清楚 我在说什么。 所以,这就是我做的有我 从这个表说此列, 而且是非常明确的。 所以,再一次,我选择 全名和母亲的名字 从用户表连接在一起 在任何情况下的妈妈表 在那里他们共享column-- 它们共享该用户名的概念。 因此,这里是我们以前的表。 这是我们的国家 数据库作为它存在现在。 我们提取信息 这是开始。 这是新的表格,我们要去 创建这些结合在一起。 同时注意我们不突出 纽曼的行中的用户的表, 我们不是在突出 克莱默的行中的妈妈表 因为没有一个存在于 无论sets--两个表。 这是仅有一个共同的信息 它们之间是杰里的两个表中 和gcostanza既是表。 所以,当我们在SQL JOIN,我们 get--我们做真正得到这一点。 这有点一个临时变量。 这就像一个假设 合并这两个表中。 实际上,我们得到的东西 这样,在 我们在表合并在一起 它们在共同的信息。 所以请注意users.username 和moms.username列, 它是完全一样的。 这是信息 是来自用户的一致 表和妈妈表。 所以,我们合并在一起。 我们丢弃的克莱默,因为他 在用户表中不存在, 我们抛弃纽曼,因为 他没有在母亲表中存在。 因此,这是假设合并 使用SELECT的JOIN操作。 然后,我们正在寻找的 用户的全名和用户的妈妈, 因此,这是信息 我们会从整个查询 我们用SELECT进行。 因此,我们加入了表一起 我们提取这两列, 所以,这就是我们会得到。 但是SQL连接是一种复杂的。 你可能不会做他们太多, 但只是有骨架的一些想法 你可以用它来合并两个 表如果你一起需要。 最后两个是一 简单一点我保证。 所以在更新,我们可以使用UPDATE 改变表中的信息。 一般格式是更新一些 表中,设置一些列的一些值 WHERE一些谓词是满意的。 因此,例如,我们可能要 更新用户表 并设置密码亚达 亚达,其中ID号是10。 因此,在这种情况下,我们 更新用户表。 ID号是10,用于 那里,第一行中, 我们要更新 密码内容十分重要。 所以这是会发生什么。 这是非常简单的,对不对? 这只是一个很简单的 修改该表。 DELETE是我们用来操作 从表中删除的信息。 DELETE FROM表WHERE 一些谓词是满意的。 我们要从中删除 用户表例如 其中,用户名是纽曼。 你可能已经猜到了什么事情 在这里发生之后,我们执行的SQL 查询,纽曼走了从表中。 因此,所有这些操作,因为我已经说过了, 是很容易做到在phpMyAdmin。 这是一个非常友好的用户界面。 但它确实需要手动操作。 我们不想聘请手动操作。 我们希望我们的节目 做到这一点对我们来说,对不对? 因此,我们可能想要做的 这种编程方式。 我们希望将SQL和有 别的东西,为我们做到这一点。 但是,我们已经看到,它允许 我们以编程方式做一些事情? 我们已经看到了PHP的,对不对? 它介绍了一些 动力到我们的节目。 所以幸运的是,SQL和 PHP玩的很漂亮起来。 有一个在PHP函数 称为查询,它都可以使用。 你可以通过为 参数或参数 查询一个SQL查询 您想执行。 和PHP会做以您的名义。 所以,你已经接通后 用PHP数据库, 有两大初选你这样做。 有一种叫做MySQLi的 而一些所谓的PDO。 我们不会进入一个巨大的 大量的细节那里。 在CS50,我们使用PDO。 您已经连接后 你的数据库, 然后可以进行查询数据库 通过把查询作为参数 到PHP函数。 当你这样做,你存储 在关联数组结果集。 而且我们知道如何一起工作 关联数组在PHP。 所以,我可能会说 像this-- $ results-- 这是在PHP--等于查询。 和然后把里面的 查询功能参数 那我传递查询 看起来像SQL。 而事实上这是SQL。 这是查询字符串,我会 喜欢在我的数据库中执行。 因此红色,这是PHP。 这是SQL,我很 纳入PHP通过 它的参数,查询功能。 我想从选择全名 其中,用户ID号等于10。 然后,也许以后我做到了这一点, 我可能会说这样的事情。 我想打印出来的 消息谢谢登录。 我希望它interpolate--我想 插值$结果全名。 所以,这就是我与该是如何工作的 我回来关联数组。 $结果全称会 基本上结束了打印输出, 感谢登录,杰里宋飞。 这是全名 其中,IDNUM等于10。 所以我做的 是我now--我存储 我的查询,我的查询结果 并导致一个关联数组, 和全名是名 在专栏中,我渐渐的。 所以这是我的钥匙插入结果 我想关联数组。 所以感谢登录,$结果, 全名会打印出来,将继续坚持 就在这些花间 牙套,杰里宋飞。 我会想打印出的信息 感谢您登录杰里宋飞。 现在,我们可能不希望辛苦 代码之类的东西在,对吧? 我们可能想要做类似打印 f,其中我们可以代替,也许 收集不同的信息, 或者有查询过程 不同的信息。 因此查询时,查询功能有 排序换人的这一概念 非常相似的打印˚F百分之小号 和百分比C,是问号。 我们可以使用问题 标志非常类似 打印f以替代变量。 因此,也许你的用户登录前, 和保存他们的用户ID号 在$的PHP超_session 全球性的密钥ID。 他们登录因此,也许以后, 你设置$ _SESSION ID等于10, 从实例推断 我们只是在一秒钟前看到的。 所以,当我们真正执行 此查询的结果现在, 它会插上10,或任何 在$ _SESSION ID值。 所以,让我们来 有点更有活力。 我们不是硬编码了的东西。 我们保存信息 某处,然后 我们可以再次使用这些信息来 排序概括了我们想做的事情, 和公正的插件和变化 我们网页的行为 基于什么用户的ID号码 实际上,他们已经登录后。 它也可以,不过, 您的结果集 可能包括多个行。 在这种情况下,你有 arrays--的阵列 关联数组的数组。 而你只需要遍历它。 而且我们知道如何遍历 通过在PHP中的数组,对不对? 因此,这里可能是最 我们到目前为止看到的复杂的东西。 它实际上是把 三种语言在一起。 在这里,在红,这是一些HTML。 我显然starting--这是 一些HTML,我有一个片段。 我开始一个新的段落 电视的宋飞的妈妈说。 然后随即 我开始的表。 并在那之后,我 有一些PHP的,对不对? 我有这一切的PHP代码在那里。 我显然会进行查询。 而为了让查询,我要去 可以使用SELECT母亲们的妈妈。 因此,这是getting--这是SQL。 所以蓝色是SQL。 我们看到在一秒钟前,红色是HTML。 在这里,绿色的是PHP。 所以,我正在做一个查询 到我的数据库,我 选择所有的 母亲在母亲表。 不只是缩小它归结为特定的 行,我问了所有的人。 然后我检查,如果结果是 不等于等于false。 这只是我的检查方式排序 如果结果不等于空, 我们会看到下例子。 基本上这只是检查,以 确保它实际上得到的数据备份。 因为我不想开始打印 出的数据,如果我没有得到任何数据。 然后为每个结果作为结果的 从PHP的foreach语法,我做的 正在打印$结果母亲。 所以我要得到一套 所有each--的母亲的 它的关联数组 arrays--,我打印出 每一个作为它自己的一个表中的行。 而这真的很漂亮 很多都在那里给它。 我知道有一点 位怎么回事 在这个最后的例子与阵列 arrays--关联数组的数组。 但它确实刚烧开 倒在SQL中,查询数据, 通常选择后,我们已把 把信息到表, 然后就拉出来。 这是我们把它 在这种特殊情况下。 我们将提取所有个人 母亲从妈妈表。 我们得到了一整套他们,而我们 要遍历并打印出 每一个。 如此反复,这可能是 最复杂的例子 我们已经看到,因为我们是混合三种 不同的语言在一起,对不对? 同样,我们在这里的HTML红色, 一些SQL这里的蓝色混合, 在绿一些PHP混合。 但所有这些玩 很好地在一起,这是 发展中的问题而已 良好的生活习惯,这样你可以得到 他们你想要的方式一起工作。 而只有这样,才能真正做到这一点 就是练习,练习,再练习。 我是道格·劳埃德,这是CS50。