将查询插入到多对多关系数据库中


Insert query into a many to many relationship database

之前我问过如何在多对多关系船数据库上运行获取查询,因为我正在推进 SQL + PHP 的学习路径,我遇到了以下相当复杂的情况:

我有一个包含下表的数据库:

Songs       Link        Tags
=======     =====       =========
Sid          Sid        Tid
Songname     Tid        Tagname

如何创建(在带有 HTML 表单的 PHP 中)一组检查以下内容的查询:

输入带有一些标签的新歌曲。您可以将歌曲添加到歌曲表中(相当容易)和 Sid 自动递增。
标签也需要存储,但不能重复存储。您如何创建一种方法来检查输入的标签是否不在标签表中?如果没有添加它们,并且如果它们已经在那里,请跳过它们。
最重要的是,链接表还必须(自动且正确)填充信息。新 Sid 必须与"标记"表中新添加/旧标记链接。

我什至不知道这一系列复杂的查询是否可行,但是手动执行此操作会迅速失控,因此我认为自动化方式是要走的路。

到目前为止,我已经有以下部分代码要测试(此时代码显然没有多大作用,因为它只是为了说明我在做什么):

<?php
if(isset($_POST['song']) && isset($_POST['tags'])){
$song = $_POST['song'];
$temptag = $_POST['tags'];
$tags = explode(",", $temptag);
$connection = mysql_connect("servername","db","password");
if (!$connection)
  {
  die('Could not connect: ' . mysql_error());
  }
  $query = "INSERT INTO Songs VALUES ('','$song')"; #add song
  mysql_query($query);
  # now for the tags...
  mysql_close($connection);
  echo "Song added";
}
else{
?>
<form action="add.php" method="post">
<input type="text" name="song" /> <br/>
<input type="text" name="tags" value="tag1,tag2,tag3" /> <br/>
<input type="submit" value="add song" />
</form>
<?php
}
?>

提前谢谢。

插入

歌曲后添加此内容

$song_id = mysql_insert_id();
$tags = explode("," , $_POST['tags']);
foreach($tags as $tag) {
    // check if the tag already exists
    $res = mysql_query("SELECT * FROM `Tags` WHERE `Tagname` = '".$tag."' LIMIT 1");
    if(mysql_num_rows($res) == 0) {
        // if it doesn't exist, we add it
        mysql_query("INSERT INTO `Tags` VALUES ('' '".$tag."')");
        // get the last id inserted
        $tag_id = mysql_insert_id();
    } else {
         // if found, get it's id
         $tag = mysql_fetch_assoc($res);
         $tag_id = $tag[0]['id'];
    }
    // linkage
    mysql_query("INSERT INTO `Link` VALUES ('".$song_id."', '".$tag_id."')");
}