我需要一个查询,它使用两个不同的表来得到结果。
输入是由$_GET提供的$tagID。第一个表coupons_tags有一个用于tagID的字段和一个用于couponID的字段。第二个表coupons有一个用于couponID的字段,其余的字段是我需要的信息。
根据我提供的信息,如何运行一个查询来查找与$_GET中的输入变量匹配的所有优惠券?我使用多个查询进行了半工作,但是代码很糟糕,因为我还不熟悉多表查询。
我使用的是MySQL和PHP。
发布于 2011-03-10 15:33:21
虽然jkj为您提供的解决方案是有效的,但它使用了一种旧的连接表的方法,特别是在一个子句中混合了连接条件和过滤条件,即WHERE子句。
当前标准的连接方式提出了专用的关键字,允许您将连接逻辑与过滤器逻辑分开,因此我敢说,这会使您的查询更加清晰。
根据目前的标准,你可以这样做:
SELECT c.*
FROM coupons_tags ct
INNER JOIN coupons c ON ct.couponID = c.couponID
WHERE ct.tagID = $tagID在这里,您使用INNER JOIN子句指定连接,并将连接条件ct.couponID = c.couponID放在ON关键字之后,从而将过滤条件ct.tagID = $tagID保留在WHERE子句中。
这个解决方案还具有表别名(ct、c),当您必须查询多个表时,它也可以帮助您使脚本更具可读性。
如果在查询多个表时,您指定了某些列进行选择,而不是像我所做的那样只选择*或alias.*,请记住也要包括表别名。这并不总是必要的,因为有些列只出现在您要查询的一个表中,DB引擎不会弄混您想要的列属于哪个表,但附加别名始终是一个好做法,因为它再次提高了脚本的可读性和可维护性。
发布于 2011-03-10 07:51:26
下面是SQL-query的开始部分。不过,我知道如何在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子句过滤掉您不需要的标记。
https://stackoverflow.com/questions/5253771
复制相似问题