1

我试图找到一个 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 查询来完成。

4

2 回答 2

4

您不能有一个返回可变数量列的 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'
于 2013-02-05T02:48:20.350 回答
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,但我怀疑不需要它们。

祝你好运。

于 2013-02-05T02:47:59.357 回答