フィールドtag_id
とname
のテーブルtags2
があります。テーブルtags2
をテーブルvideo
(vid_id経由)に接続するフィールドtag_id
とvid_id
の接合テーブルtag_map
があります。多数のデータを挿入する
私はvid_id
のための新しいタグを挿入すると、私は(tag_map
で唯一のエントリはそのtag_id
にあった場合、私はまた、ゴーストエントリを防ぐために、テーブルtags2
にそのタグを削除し、そのvid_id
ためtag_map
にすべての私のエントリを削除対応するtag_mapエントリのないタグエントリ)。
これで、挿入するときに各タグを進めて、そのタグがtags2
テーブルに存在するかどうかを確認します。もしそうなら、私はtag_id
を取得し、tag_map
テーブルにエントリを挿入します。そうでなければ、私は両方のテーブルに挿入します。 これを行うより良い方法はありますか?誰かが私がtags2
とtag_map
の両方に外部キーを持っているべきだと言いましたが、それでもtag_id
を得ることができるので、タグが存在するかどうかを確認する方法はまだわかりません。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_mapテーブルを変更して柔軟性を高めるためにステータスフィールドを変更すると言っていますか?データベースの専門家は、tag_idフィールドに外部キーを追加する必要があると言いましたが、私はそれを確信できないように私を助けるのを止めました。それについての考えは?あなたの時間のおかげでリチャード。 – Scarface