2017-07-31 25 views
-1

データベースのテーブルに問題があります。たとえばブログを作成している場合、ブログの投稿には複数のタグが必要です。投稿テーブルにtag_idという列があると思ったのですが、これはtag_idtagsという表に対応していますが、それは各投稿にタグが1つしかないことを意味します。私はそれぞれの投稿が複数のタグを持つことができるようにしたい。 tag_id列に複数のIDを1行で入力するにはどうすればよいですか(特定の投稿に対応)。 idsで動作しない場合は、タグ名を使用できますか?私は複数のタグ名を入力することができますが、その後、tagsテーブルのtags_namesとタグ名をどのように結びつけるのですか?単一列の単一行に複数のエントリがあります。

+0

[** MySQLデータベースを使用したJOINSによるタグベースのメールシステムの実装**](https://blog.praveen.science/implementation-for-tag-based-mail-system- by-joins-using-mysql-database /) - それは私が数年前に書いた記事です! –

答えて

1

私が数年前に書いた私の記事Implementation for tag based mail system by JOINS using MySQL Databaseを参照すると、私はあなたがしたことが正しいと言います。だから、最終的には、あなたのテーブルには、次のようになります。

投稿

mysql> SELECT * FROM `mailserver`.`mails`; 
+----+------------------+----------------------------------------------+ 
| ID | Subject   | Content          | 
+----+------------------+----------------------------------------------+ 
| 1 | Welcome Home  | Hey man, Welcome to your new house.   | 
| 2 | Hi    | Hey there, wanna see what you doing at home! | 
| 3 | Your promotion | This is to say about your promotion!   | 
| 4 | What the hell? | College is really bad!      | 
| 5 | My Project Work! | I have hereby attached my project work!  | 
+----+------------------+----------------------------------------------+ 
5 rows in set (0.00 sec) 

タグ:

mysql> SELECT * FROM `mailserver`.`maillabel`; 
+----+-----------+--------+ 
| ID | LabelName | MailID | 
+----+-----------+--------+ 
| 1 | inbox  |  1 | 
| 2 | inbox  |  3 | 
| 3 | inbox  |  5 | 
| 4 | personal |  1 | 
| 5 | friends |  2 | 
| 6 | office |  3 | 
| 7 | personal |  4 | 
| 8 | college |  5 | 
+----+-----------+--------+ 
8 rows in set (0.02 sec) 

関係テーブル

mysql> SELECT * FROM `mailserver`.`maillabel`; 
+----+-----------+--------+ 
| ID | LabelName | MailID | 
+----+-----------+--------+ 
| 1 | inbox  |  1 | 
| 2 | inbox  |  3 | 
| 3 | inbox  |  5 | 
| 4 | personal |  1 | 
| 5 | friends |  2 | 
| 6 | office |  3 | 
| 7 | personal |  4 | 
| 8 | college |  5 | 
+----+-----------+--------+ 
8 rows in set (0.02 sec) 

最終的には、2つのことに興味があります。

  1. 特定のタグから投稿を取得するにはどうすればよいですか?
  2. 特定の投稿のすべてのタグを取得するにはどうすればよいですか?特定のタグのための

    すべての記事、inbox

    mysql> SELECT * 
         FROM `mailserver`.`mails` 
           JOIN `mailserver`.`maillabel` 
           ON `mailserver`.`mails`.`id` = `mailserver`.`maillabel`.`mailid` 
         WHERE `mailserver`.`maillabel`.`labelname` = 'inbox'; 
    +----+------------------+-----------------------------------------+----+-----------+--------+ 
    | ID | Subject   | Content         | ID | LabelName | MailID | 
    +----+------------------+-----------------------------------------+----+-----------+--------+ 
    | 1 | Welcome Home  | Hey man, Welcome to your new house.  | 1 | inbox  |  1 | 
    | 3 | Your promotion | This is to say about your promotion! | 2 | inbox  |  3 | 
    | 5 | My Project Work! | I have hereby attached my project work! | 3 | inbox  |  5 | 
    +----+------------------+-----------------------------------------+----+-----------+--------+ 
    3 rows in set (0.00 sec) 
    

    そして、2つ目の質問に答えるために...

    取得

は、上記のクエリに応答するために、特定の投稿のタグ:

mysql> SELECT labelname 
     FROM `mailserver`.`maillabel` 
       JOIN `mailserver`.`mails` 
       ON `mailserver`.`mails`.`id` = `mailserver`.`maillabel`.`mailid` 
     WHERE `mailserver`.`mails`.`id` = 3; 
+-----------+ 
| labelname | 
+-----------+ 
| inbox  | 
| office | 
+-----------+ 
2 rows in set (0.00 sec) 

この実装は、のMySQL Server 5.xに有効です。この概念は、Oracle、Microsoft SQL Server、IBM DB2などに適用できます。これをMS Accessにも適用することができます。クエリの構文はデータベースごとに異なります。

+0

私の '' '' '' 'テーブルに一意でない' '' post_id '' 'を追加するとうまくいくはずです!どうもありがとうございます!!! –

+0

@ParthPatelあなたはティックボタンをクリックして自分の答えを受け入れることができますか?将来、あなたが何の答えも受け入れず、ただ質問をするならば、あなたは質問禁止の危険性があり、あなたはこのサイトで全く質問をしません! ':(' –

+1

@ParthPatel答えがあなたに役立つので、あなたはTickボタンをクリックすることで答えを受け入れるべきです。将来の読者にも役立ちます –

関連する問題