2017-03-15 7 views
0

TABLE1(ポスト)はどのように複数のタグ

[pid - ptitle - pcontent - ptags] 
[1 - PHPCourse - Lorem - PHP,MYSQL,PDO] 

表2(タグ)

[tag_id, tag_name] 
[1  -  PHP] 
[2  -  MYSQL] 
[3  -  PDO] 

これら2つのテーブルを関連付けるための最良の方法は何を選択するには? 私は3番目のテーブルを作る3つのテーブルの道に

表3(posts_tags)

[pid - tag_id] 
[1 -  1] 
[1 -  2] 
[1 -  3] 

を確認しかし、人々は、私はこの

のようにそれを使用するつもりだったとしてもカントー、これはSELECTクエリの悪いことを言いました

でも、私はコード内でtable3という言葉を使わなくても、内部結合と呼ばれるものを使用していましたが、私は理解できませんでした。

+0

見てください - http://stackoverflow.com/questions/4155873/find-in-set-vs-in –

答えて

0

以下のコードをご覧ください。

TABLE1(ポスト)

[pid - ptitle - pcontent ] 
[1 - PHPCourse - Lorem] 
[1 - PHPCourse - Lorem] 

表2(タグ)

[tag_id, tag_name] 
[1  -  PHP] 
[2  -  MYSQL] 
[3  -  PDO] 

表3(posts_tags)

[pid - tag_id] 
[1 -  1] 
[1 -  2] 
[1 -  3] 

select * from posts 
inner join posts_tags at posts.pid = posts_tags.pid 
inner join tags at tags.tag_id = post_tags.tag_id; 
0

あなたのテーブルのデザインアプローチがよさそうです。 また、wordpressとdrupalも同様のアプローチを使用しています。 さらに詳しく知りたい方は、googleの "wordpress taxonomy or drupal taxonomy"をご覧ください。 ソースをダウンロードし、DBスキーマを分析すると役立ちます。

(posts_tagsを使用せずにデータを取得する方法がわかりません...) ここに私のテーブルのスキーマとクエリがあります。

投稿

id, title, content 
1, foo, bar 
2, foo2, bar2 

タグ

id, name 
1, tag1 
2, tag2 
3, tag3 
4, tag4 

posts_tags

pid, tid 
1, 1 
1, 2 
1, 3 
2, 1 
2, 2 
2, 4 

QUERY

SELECT p.id, p.title, p.content, GROUP_CONCAT(t.name) as ptags 
FROM posts p 
INNER JOIN posts_tags pt ON (p.id = pt.pid) 
INNER JOIN tags t ON (t.id = pt.tid) 
/* WHERE p.id = 1 */ 
GROUP BY p.id 

RESULT

id title content ptags 
1 foo bar  tag1,tag2,tag3 
2 foo2 bar2  tag1,tag2,tag4 

あなたはポストとタグテーブルを分離として、いつでもあなたのタグを追加または削除して、タグ機能を追加または削除することができ、posts_tags。

関連する問題