gpt4 book ai didi

php - 将数据插入多对多

转载 作者:行者123 更新时间:2023-11-29 03:11:18 25 4
gpt4 key购买 nike

我有一个表 tags2,其中包含字段 tag_idname。我有一个联结表 tag_map,其中包含字段 tag_idvid_id,将表 tags2 连接到表 video(通过 vid_id)。

当我为 vid_id 插入一个新标签时,如果只有一个,我会删除 tag_map 中那个 vid_id 的所有条目tag_map 中那个 tag_id 的条目,我还删除了表 tags2 中的那个标签,以防止出现鬼条目(没有相应 tag_map 条目的标签条目)。

然后我在插入时继续检查每个标签,以检查该标签是否存在于 tags2 表中。如果是,我会得到它的 tag_id 并在 tag_map 表中插入一个条目。如果没有,我将插入到两个表中。 有更好的方法吗?有人提到我应该在 tags2tag_map 上都有外键,但我仍然没有知道如何检查表 tags2 中是否存在标签,这样我就可以获得它的 tag_id 并将其与 tag_map 的条目相匹配>.

foreach($variable as $tag) {

$sql = 'SELECT *, COUNT(tags2.name) as cnt
FROM tag_map
JOIN tags2 ON tags2.tag_id = tag_map.tag_id
JOIN video ON video.vid_id = tag_map.vid_id
WHERE tags2.name=?';
$stmt_tags2 = $conn->prepare($sql);
$result=$stmt_tags2->execute(array($tag));
while ($row = $stmt_tags2->fetch(PDO::FETCH_ASSOC)) {
$cnt=$row['cnt'];
$exist_tag_id=$row['tag_id'];
}

$id=md5(uniqid());
$tag_id=md5(uniqid());

if ($cnt==0){
$sql="INSERT into tag_map (id,vid_id,tag_id) VALUES (?,?,?)";
$stmt16 = $conn->prepare($sql);
$result=$stmt16->execute(array($id,$vid_id,$tag_id));
$sql="INSERT into tags2 (tag_id,name) VALUES (?,?)";
$stmt16 = $conn->prepare($sql);
$result=$stmt16->execute(array($tag_id,trim($tag)));
}
else {
$sql="INSERT into tag_map (id,vid_id,tag_id) VALUES (?,?,?)";
$stmt16 = $conn->prepare($sql);
$result=$stmt16->execute(array($id,$vid_id,$exist_tag_id));
}

}

最佳答案

嗨,让我试着阻止你,只是告诉你如何制作一个非常好的标签数据库模型。看起来你快到了,但只需要一点帮助。

表格。标签tag_id(主要)名称(可变字符)状态 TinyInt

标记关系tag_id(主要)对象类型(主要)object_id(主要)状态 TinyInt(为object_type,object_id 添加索引)

好的,所以 Tags 表存储您的标签 - 您已经有了这个。Tags_rel 存储您的标签与视频的关系。您会注意到我使用了 object_type 和 object_id,因为当您接下来说照片时,object_type = 1 可能是视频,而 object_type = 2 可能是照片等等。

现在是你的伪代码。

发布标签UPDATE tag_rel SET status = 0 WHERE object_type = x and object_id = y

-正常爆炸

对于每个标签{标签表中是否存在标签否 - 插入并获取 ID是的-获取ID。UPDATE tag_rel SET status = 1 WHERE object_type = x and object_id = y AND tag_id = id

是的,这将是我做这件事的最佳方式,我认为这几乎是行业标准,对此查询几乎没有把握。

SELECT *, COUNT(tags2.name) 作为 cnt来自 tag_mapJOIN tags2 ON tags2.tag_id = tag_map.tag_id在 video.vid_id = tag_map.vid_id 上加入视频WHERE tags2.name=?

希望对您有所帮助。理查德

关于php - 将数据插入多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com