用MySQL编写复杂查询的麻烦

时间:2011-03-09 23:46:48

标签: php mysql sql

我需要一个使用两个不同的表来获取结果的查询。

输入为$tagID,由$ _GET提供。第一个表coupons_tags有一个tagID字段和一个couponID字段。第二张表,优惠券,有一个couponID字段,其余字段是我想要的信息。

如何根据我提供的信息运行查询,以查找与$ _GET中的输入变量匹配的所有优惠券?我使用多个查询进行了半工作,但代码很糟糕,因为我是多表查询的新手。

我正在使用MySQL和PHP。

2 个答案:

答案 0 :(得分:2)

虽然解决方案 jkj 为您提供了工作,但它使用较旧的方式连接表,特别是在一个子句中混合连接条件和过滤条件,即WHERE子句。

目前标准的加入方式提出了专用关键字,允许您将连接逻辑与过滤逻辑分开,从而使您的查询更加清晰,我敢说。

以下是按照现行标准的方式:

SELECT c.*
FROM coupons_tags ct
  INNER JOIN coupons c ON ct.couponID = c.couponID
WHERE ct.tagID = $tagID

在此您指定加入INNER JOIN子句并在<{1}}关键字后面加上加入条件ct.couponID = c.couponID,从而离开过滤条件ON,在ct.tagID = $tagID子句中。

此解决方案还具有表别名(WHEREct),当您需要查询多个表时,它也可以帮助您提高脚本的可读性。

如果在查询多个表时,您指定某些列进行选择而不是c*,就像我一样,请记住也包括表别名。它并不总是必要的,因为有些列只出现在您查询的一个表中,并且数据库引擎不会混淆确定您认为该列属于哪个表,但这总是一个很好的做法附加的别名,因为它再次提高了脚本的可读性和可维护性。

答案 1 :(得分:1)

这是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

您可以认为这些表是“并排”放置的,这样每个水平行在两个表中都有相同的coupons_id。

第二个where子句过滤掉你不想要的标签。