【发布时间】:2011-10-19 19:22:09
【问题描述】:
我有一个名为 tags 的表,其中包含 id、vid_id、name 列,其中 id 是使用 md5(uniqid()); 生成的随机 id,vid_id 是标签所在的视频的 id关联,name 是标签名称。如果一个视频有 5 个标签,它们都会存储在标签表中。我最近意识到这是一个糟糕的表格设计,因为我有很多重复的标签。我创建了另一个表 tag_map。它有三列id、vid_id、tag_id。我想基本上实现这里显示的“毒”解决方案http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html。
我想要做的是以某种方式将数据从 tags 转移到 tag_map,删除 tags 中的 vid_id 列并删除任何额外的标签中的条目,因此每个 tag_map 条目仅映射到一个标签条目。有人知道这样做的有效方法吗?我一直在想:
$sql = 'SELECT * FROM tags';
$stmt3 = $conn->prepare($sql);
$result=$stmt3->execute();
while ($row = $stmt3->fetch(PDO::FETCH_ASSOC)) {
$id=md5(uniqid());
$sql = 'INSERT INTO tag_map VALUES (?,?,?)';
$insert = $conn->prepare($sql);
$result=$insert->execute(array($id,$row['vid_id'],$row['id']));
}
但是当我尝试考虑如何删除表 tags 中的额外标签并将每个 tag_map 条目仅映射到一个标签条目时,我感到困惑。任何建议将不胜感激。
【问题讨论】: