1

私はarticlesテーブルとテーブルを持っていtagsます。タグテーブルには、記事に割り当てられたタグが含まれています。次のようになります。

id | article_id | tag_name
---------------------------------

1  | 345        | cats
2  | 345        | dogs

記事(および各記事に割り当てられたすべてのタグ)をフェッチするための私のクエリは次のようになります。

SELECT *
FROM `articles` a
JOIN `tags` t ON t.article_id = a.id

問題は、特定の記事に複数が割り当てられている場合、タグが1つしか返されないことです。JOINを使用して記事に関連付けられたすべてのタグを取得する方法はありますか、それとも2番目のクエリなしではこれは不可能ですか?

4

3 に答える 3

0

多対多の関係を望んでいる場合は、データ モデルを に分割しArticle、関係をTag保持することをお勧めします。ArticleTagArticleTag

ArticleTag表には、 および の列が含まれる場合がArticleIdありますTagId。次に、記事とタグを別々のテーブルに配置します。

于 2012-12-02T16:09:23.800 に答える
-1

記事に関連付けられたすべてのタグを取得したい場合は、単に必要です

select * from tags where article_id = ?

記事データも必要な場合は、結合を行うと非正規化された結果が得られます。

select a.*, t.tag_name
from articles a
join tags t
on t.article_id = a.id

記事ごとにタグ名のリストを作成することは、名前を文字列に変換して連結するか、アプリケーションにこの種のものをいじらせる場合にのみ可能です。

于 2012-12-02T16:05:40.523 に答える
-1

両方のテーブルについて完全に言及していませんが、 a.article_id = t.article_id に参加する必要があると思います

于 2012-12-02T16:09:11.550 に答える