0

我有一个搜索查询,它将从 3 个表中检索信息我进行了查询,因此它从 2 个表中检索信息,我不知道我是否可以合并第三个

SELECT *
FROM articles
INNER JOIN terms
ON articles.ArticleID = terms.RelatedID AND terms.TermType = 'article'

第三个查询是

SELECT * FROM categories where CategoryID in (something)

某些东西是文章表中的一个字段,其值类似于“3,5,8”

我想将这 2 个查询合并为 1 个查询,我不知道它是否可以通过 1 个查询完成

4

2 回答 2

1

不查看您的架构(这会很有帮助)和一些示例数据尝试此查询

选择 *
FROM 类别,文章
INNER JOIN 术语
开启(articles.ArticleID = terms.RelatedID AND terms.TermType = 'article')
在哪里
FIND_IN_SET(categories.CategoryID,articles.categories)

这是定义FIND_IN_SET()

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

于 2012-10-03T23:32:13.530 回答
0

如果我理解正确的话。看起来每篇文章都有多个类别,所有类别 ID 都存储为串联字符串。

SELECT A.*
FROM articles A
INNER JOIN terms T on A.ArticleID = T.RelatedID AND T.TermType = 'article'
LEFT JOIN categories C on C.CategoryID IN (3,5,8 OR A.CategoryIDs)
GROUP BY C.CategoryName

您想 LEFT JOIN 因为您可能有也可能没有多个类别,您可以按类别分组以获取不同的类别文章对,并根据需要 CONCAT() 重新组合文章记录。

于 2012-10-03T23:34:19.010 回答