1

私は簡単なPHPフォーラムを作成しています。このフォーラムでは、メイントピックと一緒にタグが作成されます。

テーブルは次のようになります。

  CREATE TABLE IF NOT EXISTS `topic` (
  `topic_id ` int(100) NOT NULL AUTO_INCREMENT,
  `topic_head` varchar(5) NOT NULL,
  `topic_body` varchar(20) NOT NULL,
  `topic_tag` varchar(20) NOT NULL,
  `topic_date` varchar(20) NOT NULL,
  `topic_owner` varchar(20) NOT NULL,
  PRIMARY KEY (`topic_id`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

特にタグについては、次の形式で選択クエリを実行します。

$tags = mysql_query("SELECT DISTINCT topic_tags
                       FROM forum_topics")
                       while($tags = mysql_fetch_assoc($tags){   
                       $split_tags  = "$tags";
                       $pieces = explode(",", $split_tags);

現在、topic_tagsは次の形式tag1,tag2,tag3,tag4 になっています。各トピックタグが各トピックに関連付けられるようにするにはどうすればよいですか。

4

2 に答える 2

2

私が正しく理解していれば、必要なのはタグ用の別のテーブルと、関係を格納するための3番目のテーブルです。それで:

CREATE TABLE `tags` (
  `t_id` int(11) NOT NULL AUTO_INCREMENT,
  `t_text` varchar(150) NOT NULL,
  `t_datetime` datetime NOT NULL,
  PRIMARY KEY (`t_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `tag_pairs` (
  `tp_id` int(11) NOT NULL AUTO_INCREMENT,
  `tp_topic_id` int(11) NOT NULL,
  `tp_tag_id` int(11) NOT NULL,
  `tp_datetime` datetime NOT NULL,
  PRIMARY KEY (`tp_id`),
  FOREIGN KEY (`tp_topic_id`) REFERENCES topic('topic_id'), 
  FOREIGN KEY (`tp_tag_id`) REFERENCES tags('t_id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

次に、ID($ THIS_ID)に基づいてトピックのタグを取得するには:

$query = mysql_query("
  SELECT tags.t_text 
  FROM tags, tag_pairs, topic 
  WHERE topic.topic_id = '$THIS_ID'
  AND tag_pairs.tp_topic_id = topic.topic_id 
  AND tag_pairs.tp_tag_id = tags.t_id 
 ");
于 2012-09-10T03:37:03.973 に答える
0

列を次のようidに呼び出します:、、、、、およびheadbodytag_id (FK)dateuser_id (FK)

これははるかに理解しやすく、使いやすいです。説明させてください:

現在、列を次のように使用していますが、次のtopic_idようになりますtopic.id。どうやってこれを手に入れますか?を使用するだけtablename + columnです。したがって、テーブルが呼び出されtopics、という列がある場合は、次のidように言うことで使用できますtopics.id。上記のda5idからの回答では、彼が使用していることがわかりますtopics.topic_id。少しやり過ぎですね。;)

また、データベースの正規形3に関するこの記事を読んで、 database+3nfを使って自分で少しググってください。

于 2012-09-11T07:42:02.633 に答える