配置mysql表或查询以满足这些需求

时间:2013-09-19 00:01:42

标签: php mysql sql

我已经掌握了大部分mysql查询的要点以及如何设置我的表但是我对如何做到这一点有点迷失。

我目前有一个具有以下格式的表:

 tag_target_id | tag_id   | sub_tag_id | tag_target_name | tag_type_id
    int(11)    | int(11)  | int(11)    |   varchar(255)  | int(11
    <PK>       | <FK>     |   <FK>     |                 | <FK>

单个tag_target_id对应一个内容即。现在表中的视频,文章等应该有多个条目具有相同的tag_target_id and tag_target_name和不同的tag_id , sub_tag_id , tag_type_id足够简单

所以我的问题是当我将数据插入表中时,我有一个如下所示的PDO查询:

 "INSERT INTO phpro_tag_targets (tag_id, sub_tag_id, tag_target_name, tag_type_id) 
  VALUES (:tag_id, :sub_tag_id,:tag_target_name,:tag_type_id)" 

...我过去常常使用tag_target_id作为自动增量,但每个新查询显然会增加tag_target_id,因此单个内容会有tag-target_id = 5, 6, 7, 8, 9例如。{我希望每个新内容都有一个tag_target_id
现在我想以某种方式让每一段新内容都有一个新的tag_target_id,但不是每个条目都有一个内容,只有一个内容有自己独特的想法

所以例如。对于表格中的一条内容,该内容的所有数据可能如下所示:

 tag_target_id | tag_id   | sub_tag_id | tag_target_name | tag_type_id
    int(11)    | int(11)  | int(11)    |   varchar(255)  | int(11
     54        |  22      |    64      | url_to_content  |   16     
     54        |  66      |    82      | url_to_content  |   24
     54        |  22      |    77      | url_to_content  |   18 
     54        |  87      |    55      | url_to_content  |   16
     54        |  66      |    92      | url_to_content  |   20

那么如何更改表的结构或编写查询集以实现所需的输出?

2 个答案:

答案 0 :(得分:0)

你仍然需要一个唯一的ID来区分记录。我将创建一个名为“tag_content_id”的新列,并使用它来存储分组ID(在您的示例中为54)。这样,您的表将具有用于键的唯一ID(tag_target_id),并且还可以区分不同的内容条目和组项(tag_content_id)。当所有其他方法都失败时,添加一列!

答案 1 :(得分:0)

假设您有单独的表格,其中包含有关内容本身的信息您可以在字段tag_target_idtag_idsub_tag_id上创建composite primary key

并将tag_target_id设为此内容表的FK。

对于现有表,查询将是

ALTER TABLE phpro_tag_targets ADD PRIMARY KEY uniq_target_tag_sub (tag_target_id,tag_id,sub_tag_id)