【发布时间】:2017-10-30 05:53:19
【问题描述】:
该数据库是视频租赁店的一个非常基本的概念。使用 PHP(以及 HTML、CSS、bootstrap 等)显示数据库。
我有三个表:
tl_dvd:其中包含有关 dvd、持续时间、名称、语言等的基本信息。
tl_order:包含租借电影的人的姓名和开始日期。
tl_client:这与我的问题/问题并不真正相关,但仅包含客户的名字和姓氏。
当我在订单页面上时,它会显示当前正在运行的所有订单。我在tl_order 中有一个名为returned 的列,其中0 代表未返回,1 代表返回。
有一个按钮,上面写着'terug gebracht'(='received back' in English)将选择的订单设置为 1。tl_order 只显示未返回的订单然而(returned 设置为 0)。 在 SQL 查询的末尾,我设置了类似 ... AND returned = 0';
这是我应该使用LEFT (OUTER?) JOIN 的部分。 如果订单未返回(这意味着returned 仍在0 中tl_order) dvd 不应该出现在我的tl_dvd 中(想想我们每部电影只有一个 dvd 副本)。我在tl_dvd 中尝试过这些LEFT JOINs:
'SELECT * FROM tl_dvd LEFT JOIN tl_order WHERE tl_order.returned = 1';
以 500 错误打破我的页面。
'SELECT * FROM tl_dvd LEFT JOIN tl_order ON tl_order.returned = 1';
不会给我一个错误,但会向每个标题发送 3 次垃圾邮件。
谁能解释我如何解决这个问题或我做错了什么?
【问题讨论】:
-
在连接表格时,即使您不显示 2 个表格的字段,您也会得到 2 个表格的每个组合的一行。尝试从两个表中进行选择以理解我的意思。您错过了关联 JOIN 中的 id 的 ON 子句。
-
不清楚你想要输出什么。请阅读minimal reproducible example 并采取行动。也请尽可能使用文本。在这里,而不是图像;在代码块中格式化表格。 PS 你说“dvd 不应该出现在我的 tl_dvd 中”,但你不是说在 输出 中吗? (见我的回答。)
标签: php mysql left-join inner-join outer-join