2016-11-18 1 views
1

これは私のテーブル/エンティティです:table1のすべての列とtable1のすべての行を取得する方法

articles 
- id 
- title 
- body 

keywords 
- id 
- fk_article_id 
- title 

一つの記事では、(1対多の関係に、多くのではない多くの)複数のキーワードを持つことができます。 1つの記事に属する1,2,3,4,5,6,7,8,9、...のキーワードがあります。

1件の記事とタイトルのタイトルと本文をすべて選択するにはどうすればよいですか?

結果の例:私はINNER JOINを行う場合

- article.title 
- article.body 
-- keyword1.title 
-- keyword2.title 
-- keyword3.title 

、それから私は二度同じ記事のタイトルと本文を取得します。これはGROUP BYで行うことができますか?またはNESTED文を使用する必要がありますか?

INNER私が試したが、明らかに適切なソリューションではありませんこれは、JOIN:

サンプルについて
SELECT articles.title, articles.body, keywords.title 
FROM articles 
INNER JOIN keywords 
ON articles.id = keywords.fk_article_id 
WHERE articles.id = 1 
+3

サンプルデータ、取得した結果、予想される結果を提供してください。 – Viki888

+1

記事タイトルごとに常に3つのキーワードタイトルがありますか? –

+0

サンプルデータと試したクエリ、および取得する疑似クエリを入力します。私は私のような怠惰な助手が質問に答えるのを助けます。 – Aus

答えて

2

あなたは以下のクエリを実行する場合は、

articles 
id | title | body 
---- ----- ----- 
1 | Harry Potter | text 
2 | LOTR | text text 

keywords 
id | title 
---- ----- 
1 | magic 
1 | stick 
2 | dwarf 
2 | ring 

があるとし

Select a.title,a.body,group_concat(k.title) from articles a JOIN keywords k ON a.id=k.id group by a.id 

返信する ハリー・ポッター(魔法使い、スティック) LOTR、(ドワーフ、リング)

+0

これであなたの質問に答えることができない場合は、あなたの質問を言い換えてください。 – CFreitas

+0

クエリはgroup_concat()なしでどのように見えますか?それも可能ですか?文字列の代わりにキーワードの配列が返されるようにするには? –

+1

@JoSmo:group_concat()を指定しないと、クエリは各グループの単一のフィールドを選択し、配列を直接取得することはできませんが、サーバ側のスクリプトでは、PHPで非常に簡単に配列に変換することができます[implode] (http://php.net/manual/en/function.implode.php) –

関連する問題