首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL编写复杂查询时遇到麻烦

问使用MySQL编写复杂查询时遇到麻烦
EN

Stack Overflow用户
提问于 2011-03-10 07:46:48
回答 2查看 73关注 0票数 1

我需要一个查询,它使用两个不同的表来得到结果。

输入是由$_GET提供的$tagID。第一个表coupons_tags有一个用于tagID的字段和一个用于couponID的字段。第二个表coupons有一个用于couponID的字段,其余的字段是我需要的信息。

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

我使用的是MySQL和PHP。

EN

回答 2

Stack Overflow用户

发布于 2011-03-10 15:33:21

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

当前标准的连接方式提出了专用的关键字,允许您将连接逻辑与过滤器逻辑分开,因此我敢说,这会使您的查询更加清晰。

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

代码语言:javascript
复制
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引擎不会弄混您想要的列属于哪个表,但附加别名始终是一个好做法,因为它再次提高了脚本的可读性和可维护性。

票数 2
EN

Stack Overflow用户

发布于 2011-03-10 07:51:26

下面是SQL-query的开始部分。不过,我知道如何在PHP中调用它。

代码语言:javascript
复制
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子句过滤掉您不需要的标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5253771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档