Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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/9/csharp-4.0/2.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 使用MySQL编写复杂查询时遇到问题_Php_Mysql_Sql - Fatal编程技术网

Php 使用MySQL编写复杂查询时遇到问题

Php 使用MySQL编写复杂查询时遇到问题,php,mysql,sql,Php,Mysql,Sql,我需要一个查询,它将使用两个不同的表获得结果 输入是从$\u GET给出的$tagID。第一个表是toups\u tags,它有一个tagID字段和一个couponID字段。第二个表coups有一个couponID字段,其余字段是我想要的信息 我如何运行一个查询,根据我提供的信息查找与$\u GET的输入变量匹配的所有优惠券?我使用多个查询进行了半工作,但代码很糟糕,因为我不熟悉多表查询 我使用的是MySQL和PHP。这里是SQL查询的开始。不过我知道如何在PHP中调用它 SELECT coup

我需要一个查询,它将使用两个不同的表获得结果

输入是从$\u GET给出的
$tagID
。第一个表是toups\u tags,它有一个tagID字段和一个couponID字段。第二个表coups有一个couponID字段,其余字段是我想要的信息

我如何运行一个查询,根据我提供的信息查找与$\u GET的输入变量匹配的所有优惠券?我使用多个查询进行了半工作,但代码很糟糕,因为我不熟悉多表查询


我使用的是MySQL和PHP。

这里是SQL查询的开始。不过我知道如何在PHP中调用它

SELECT coupons.something, coupons.somethingelse
FROM coupons_tags, coupons
WHERE coupons_tags.coupons_id = coupons.coupons_id
  AND coupons_tags.tag_id = $tagID
您可以认为这些表是“并排”放置的,因此两个表中的每一水平行都具有相同的id

第二个where子句过滤掉您不想要的标记。

虽然jkj提供的解决方案正在运行,但它使用了一种旧的连接表的方法,特别是在一个子句中混合了连接条件和过滤条件,即
where
子句

目前标准的连接方式建议使用专用关键字,允许您将连接逻辑与过滤逻辑分离,从而使您的查询更清晰,我敢说

根据目前的标准,您可以这样做:

SELECT c.*
FROM coupons_tags ct
  INNER JOIN coupons c ON ct.couponID = c.couponID
WHERE ct.tagID = $tagID
这里,您使用
内部联接
子句指定联接,并将联接条件
ct.couponID=c.couponID
放在
ON
关键字之后,从而将过滤条件
ct.tagID=$tagID
保留在
WHERE
子句中

此解决方案还具有表别名(
ct
c
),这也可以帮助您在查询多个表时使脚本更具可读性


如果在查询多个表时,您指定了要选择的特定列,而不是像我那样仅指定
*
别名。*
,请记住也包括表别名。这并不总是必要的,因为某些列只存在于您要查询的一个表中,并且DB引擎在确定该列属于哪个表时不会感到困惑,但附加别名始终是一种好的做法,同样,提高脚本的可读性和可维护性。

显示带有标记和CUPON的表的定义