我正在尝试查找一个SQL查询,最后得到包含文章标题及其关联关键字的1行。
Articles
-ArticleID PK
-ArticleTitle
-ArticleBody
Keywords
-KeywordID PK
-Keyword UNIQUE
Keyword_Article
-KeywordID PK
-ArticleID PK
如果没有PHP中的多个查询,这可能吗?
我所拥有的内容与每篇文章的关键字一样多行
SELECT Article.ArticleID,
Article.ArticleTitle,
Keywords.Keyword,
Keywords.KeywordID
FROM Article
LEFT JOIN Keyword_Article
ON (Keyword_Article.ArticleID = Article.ArticleID)
LEFT JOIN Keywords
ON (Keyword_Article.KeywordID = Keywords.KeywordID)
WHERE Article.ArticleID='example'
我很想知道如何以及是否可以使用1个SQL查询来完成。
答案 0 :(得分:3)
您不能拥有返回可变数量列的SQL语句。因此,您不能将每个关键字放在一个单独的列中,其中列数会因文章而异(除非您使用动态SQL)。
您可以使用group_concat
:
SELECT Article.ArticleID, Article.ArticleTitle,
group_concat(Keywords.Keyword separator ', ') as keywords
FROM Article LEFT JOIN
Keyword_Article
ON Keyword_Article.ArticleID = Article.ArticleID EFT JOIN
Keywords
ON Keyword_Article.KeywordID = Keywords.KeywordID
WHERE Article.ArticleID = 'example'
答案 1 :(得分:1)
您应该考虑使用GROUP_CONCAT()
:
SELECT Article.ArticleID,
Article.ArticleTitle,
GROUP_CONCAT(Keywords.Keyword) as Keywords
FROM Article
LEFT JOIN Keyword_Article
ON (Keyword_Article.ArticleID = Article.ArticleID)
LEFT JOIN Keywords
ON (Keyword_Article.KeywordID = Keywords.KeywordID)
WHERE Article.ArticleID='example'
在您的查询中,您也会返回KeywordId。你也可以使用GROUP_CONCAT,但我怀疑它们不需要。
祝你好运。