我有一个搜索查询,它将从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”
我想在1个查询中执行此2个查询,我不知道是否可以通过1个查询完成
答案 0 :(得分:1)
不查看您的架构(这会有所帮助),并且一些示例数据会尝试此查询
SELECT * FROM categories,articles INNER JOIN terms ON (articles.ArticleID = terms.RelatedID AND terms.TermType = 'article') WHERE 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
答案 1 :(得分: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,因为您可能有或可能没有多个类别,您可以按类别分组以获取disticnt类别文章对,而CONCAT()则根据需要重新组合文章记录。