我陷入了这个问题,并且不太确定应该如何提出查询。
我有两张表,一张包含文章,一张包含所谓的ATC 代码。
ATC 代码如下所示:N02AA59
。这是由 7 个字符组成的完整代码。最后一个字符之前的每个字符都是一个特定的类别。因此N02A
也是一个ATC代码。
现在我的文章表远非包含所有 ATC 代码。 我想要实现的是在自动完成中使用的结果集,以这种方式,所有带子字符串的 ATC 代码(字符 1-6)都应该是结果集的一部分,当且仅当它们导致文章的 ATC 代码以我的文章表中的这些字符开头。
例如,如果我在自动完成中输入“N02A”,则应成为结果集一部分的项目都是以“N02A”开头的 ATC 代码,因为我们有一篇文章的 ATC 代码为“N02AA59” ”。
这是基本查询,但正如您可能猜到的那样,它仅返回 7 个字符的 ATC 代码,因为我的文章表中不存在更短的 ATC 代码:
SELECT _atc_codes.code, _atc_codes.name
FROM articles
JOIN _atc_codes
ON (_atc_codes.code LIKE 'N02A%' AND _atc_codes.id = articles.atc_code)
整个查询有一个转折。第二列(相应的名称字段)必须是生成的 ATC 代码的字段。因此,如果我搜索“N02A”,这并不意味着每个项目都应该具有 ATC 代码“N02A”的名称。
最佳答案
根据您问题中的详细信息,我假设您有两个表。
表 1:_atc_codes,其中包含字段 code 和 name>(可能更多)。
表 2:包含字段 atc_code 的 articles 以及包括 article 在内的其他字段(不为空) .
我用这些最少的信息进行了测试,除了一个小错误之外,您的查询有效。
在查询行 ON (_atc_codes.code LIKE 'N02A%' AND _atc_codes.id =articles.atc_code)
中,您将 _atc_codes.id 与 articles.atc_code 进行比较
它应该是 _atc_codes.code 而不是 _atc_codes.id
如果有关于 _atc_codes.id< 的其他详细信息,请发表评论/strong> 原始帖子中缺少该内容,或者如果我弄错了。
关于mysql - 需要查询逻辑方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20262748/