我已经掌握了大部分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
那么如何更改表的结构或编写查询集以实现所需的输出?
答案 0 :(得分:0)
你仍然需要一个唯一的ID来区分记录。我将创建一个名为“tag_content_id”的新列,并使用它来存储分组ID(在您的示例中为54)。这样,您的表将具有用于键的唯一ID(tag_target_id),并且还可以区分不同的内容条目和组项(tag_content_id)。当所有其他方法都失败时,添加一列!
答案 1 :(得分:0)
假设您有单独的表格,其中包含有关内容本身的信息您可以在字段tag_target_id
,tag_id
和sub_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)