###実現したいこと
掲示板に複数タグがあるとき、SQLでの取得結果としてタグはどのように取得させるのですか?
適切な取得を知りたいです。
###前提
以下3つのテーブルがあります。
postがメインコンテンツでそれにタグが付いています。
タグの情報はtagsが持っています。
どのタグが付いているかはtag_relationsが持っています。
mysql > posts
post_id | text |
---|---|
1 | こんにちは |
2 | ぎゃー |
3 | がーがー |
mysql > tags
tag_id | tag_name |
---|---|
1 | いびき |
2 | 叫び声 |
3 | 挨拶 |
mysql > tag_relations
relation_id | post_id | tag_id |
---|---|---|
1 | 2 | 1 |
2 | 2 | 2 |
3 | 1 | 3 |
4 | 3 | 1 |
###ソースコード
もし上のテーブルからタグ情報を含めたpostsを取得すると次のSQLになりますでしょうか。
ここで冒頭の疑問が生じました。
SQL
1SELECT p.post_id, p.text, t.tag_name 2FROM posts p 3LEFT JOIN tag_relations r ON r.post_id=p.post_id 4LEFT JOIN tags t ON t.tag_id=r.tag_id
↓結果は「ぎゃー」が2つ並ぶことになりますが、これは適切なのでしょうか?
post_id | text | tag_name |
---|---|---|
2 | ぎゃー | いびき |
3 | がーがー | いびき |
2 | ぎゃー | 叫び声 |
1 | こんにちは | 挨拶 |
上のようにレコードが重複することになりますが、それは正しいのでしょうか?一般論で知りたいです。普通こうしますか?
取得結果はPHPでループさせるのですが、このように同じレコードが重複する取得結果は適切なのでしょうか?
もし適切でなければ、どのようにしてタグの情報を調整するのが一般的な対応なのでしょうか?
「こういうSQLにすればタグの情報は同じカラムに入り、レコードが重複することはない」などの情報があれば宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/25 03:36