Php 使用MySQL编写复杂查询时遇到问题
我需要一个查询,它将使用两个不同的表获得结果 输入是从$\u GET给出的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
$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的表的定义