1

記事のタイトルとそれに関連するキーワードを含む1行で終わるSQLクエリを見つけようとしています。

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を使用しない場合)。

次を使用して、キーワードを1つの列に連結できます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 に答える