Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
SQL/PHP如何使用左连接过滤此内容?_Php_Mysql_Left Join_Inner Join_Outer Join - Fatal编程技术网

SQL/PHP如何使用左连接过滤此内容?

SQL/PHP如何使用左连接过滤此内容?,php,mysql,left-join,inner-join,outer-join,Php,Mysql,Left Join,Inner Join,Outer Join,该数据库是视频租赁商店的一个非常基本的概念。数据库使用PHP(以及HTML、CSS、bootstrap等)显示 我有三张表格: TLU dvd:包含有关dvd的基本信息、持续日期、名称、语言等 tl_order:包含租用电影的人的姓名和开始日期 tl_client:它与我的问题不太相关,只包含客户的名字和姓氏 当我在订单页面时,它会显示当前正在运行的所有订单。我在tl\u顺序中有一列名为returned,其中0表示未返回,1表示已返回 有一个按钮,上面写着“terug gebracht”(英

该数据库是视频租赁商店的一个非常基本的概念。数据库使用PHP(以及HTML、CSS、bootstrap等)显示

我有三张表格:

TLU dvd:包含有关dvd的基本信息、持续日期、名称、语言等

tl_order:包含租用电影的人的姓名和开始日期

tl_client:它与我的问题不太相关,只包含客户的名字和姓氏

当我在订单页面时,它会显示当前正在运行的所有订单。我在
tl\u顺序中有一列名为
returned
,其中
0
表示未返回
1
表示已返回

有一个按钮,上面写着“terug gebracht”(英文为“received back”),它会将所选顺序设置为1tl_订单仅显示尚未返回的订单(
已返回
设置为0)。
在SQL查询结束时,我设置了类似于
的内容。。。并返回=0'

这里是我应该使用
左(外?)连接的部分,如果订单没有返回(这意味着
返回的
仍在
0
tlu顺序
),dvd不应该出现在我的
tlu dvd
中(想象一下,我们每部电影只有一个dvd副本)。我在
tl\u dvd
中尝试了这些
左连接
s:

'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次


有人能告诉我如何解决这个问题或者我做错了什么吗?

您的查询的问题是,您没有指定如何连接表(连接哪些列),因此它会返回两个表中的所有内容

试试这个:

select 
    * 
from 
    tl_dvd left join tl_order on (tl_dvd.titel=tl_order.titel) 
where 
    tl_order.returned = 1

您没有清楚地解释或给出查询结果中所需内容的示例。但是从你的例子中你可能想要

SELECT *  FROM tl_dvd
LEFT JOIN tl_order
ON tl_dvd.titel = tl_order.titel
WHERE tl_order.returned = 1
不带ON的外部连接不是标准的SQL,但MySQL在内部连接和外部连接中都会像1=1上的
ON
,这两种情况下都相当于交叉连接

但看起来你并不真正想要左连接而不是(内部)连接。左联接返回(内部)联接行加上由null扩展的不匹配的左表行。所以这里除了每个dvd订单有一行外,还有每个nordered dvd的一行,订单信息为空。因为“如果订单未返回[…]则dvd不应显示”似乎表示您不需要这些额外的行。您可能希望上面没有“LEFT”或等效(但不太清楚)


您可能希望将查询重写为用户内部联接,如下所示

SELECT * FROM tl_dvd INNER JOIN tl_order ON
tl_dvd.id=tl_order.id //replace the id with the id you would like to join
WHERE tl_order.returned = 1

在联接表时,即使不显示这两个表的字段,每两个表的组合也会得到一行。试着从两个表中进行选择以理解我的意思。您缺少ON子句来关联联接中的ID。不清楚要输出什么。请阅读并采取行动。也请尽可能使用文本。这里,而不是图像;在代码块中格式化表格。PS你说“dvd不应该出现在我的TLU dvd中”,但你不是说,在输出中吗?(见我的答案。)
SELECT * FROM tl_dvd INNER JOIN tl_order ON
tl_dvd.id=tl_order.id //replace the id with the id you would like to join
WHERE tl_order.returned = 1