之前我曾询问如何在多对多关系数据库上运行获取查询,因为我正在学习SQL + PHP的学习路径,并遇到了以下相当复杂的情况:
我有一个包含以下表格的数据库:
Songs Link Tags
======= ===== =========
Sid Sid Tid
Songname Tid Tagname
如何创建(在PHP中使用HTML表单)一组检查以下内容的查询:
使用某些标签输入新歌。您将歌曲添加到歌曲表(相当简单)和Sid自动增量。
标签也需要存储,但不能存储。如何创建一种方法来检查输入的标签是否已经不在标签表中?如果没有添加它们,如果它们已经在那里跳过它们
最重要的是,链接表也必须(自动且正确地)填充信息。新的Sid必须与Tags表中的新添加/旧标签链接。
我甚至都不知道这一系列复杂的查询是否可行,但手工完成此操作会迅速失控,所以我认为采用自动化方法是可行的。
到目前为止,我已经得到了以下部分代码进行测试(代码显然在这一点上没有做太多,因为它只是为了说明我要做的事情):
<?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
}
?>
提前致谢。
答案 0 :(得分:2)
插入歌曲后添加此内容
$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."')");
}