[英]function for deleting a comma separated value from a column in database using php
我在我的数据库中有一个表,其中包含两个字段,如UserID和MovieID。 我在php中编写了一个函数用于插入和更新表,其中MovieIDs是可能包含许多值的字段,这些值由逗号分隔,类似地需要一个从表中删除值的函数,我用于插入和更新的函数表中的值如下所示:
<?php
addmovietowatchlist(2,36546436);
function addmovietowatchlist($userid, $movieid)
{
$con=mysql_connect('localhost','username','password');
if(!$con)
{
die('could nt connect 2 the server');
}
mysql_select_db("database", $con);
$useriddb = mysql_query("select MovieIDs from tbl_user_watchlist WHERE UserID = ".$userid);
$count = mysql_num_rows($useriddb);
if($count>0)
{
$mids=mysql_fetch_assoc($useriddb);
$listarr=explode(",",$mids['MovieIDs']);
array_push($listarr, $movieid);
$finallist=implode(",",$listarr);
//update
$result = mysql_query("UPDATE tbl_user_watchlist SET MovieIDs = '".$finallist."' WHERE UserID = ".$userid);
if($result)
echo "updated sucessfully";
}
else{
//insert
$result = mysql_query("INSERT INTO tbl_user_watchlist (UserID,MovieIDs) values (".$userid.",'".$movieid."')");
echo "inserted successfully";
}
}
?>
现在,我需要编写一个函数来删除表中的值以及逗号,如果已经在该行中插入了一个值...任何人都可以帮我编写代码...我尝试编写下面的代码但是它没有用....请帮我摆脱这个..
function deletemovietowatchlist($userid, $movieid)
{
$con=mysql_connect('localhost','username','password');
if(!$con)
{
die('could nt connect 2 the server');
}
mysql_select_db("database", $con);
$useriddb = mysql_query("select MovieIDs from tbl_user_watchlist WHERE UserID = ".$userid);
$count = mysql_num_rows($useriddb);
if($count>0){
$mids=mysql_fetch_assoc($useriddb);
$listarr=implode(",",$mids);
//echo $listarr;
//array_pop($listarr, $movieid);
$finallist=explode(",",$listarr);
echo $finallist;
$result = mysql_query("DELETE MovieIDs FROM tbl_user_watchlist WHERE UserID=".$userid);
if($result)
echo "deleted successfully";
}
}
正确的方法是将事物分成两个表。 可以保存当前表中的所有信息,除非它不包含以逗号分隔的列表。 相反,另一个表将有两列,一列指定它所属的列表(例如,第一个表中的行的ID ...或者如果用户的列表从不多于一个,则可以使用userid),以及然后是电影的一栏。
也就是说,如果改变现有系统太多工作和/或您受到限制并决心坚持使用劣质且低效的数据库结构,则可以在当前设置中实现此功能。 基本上,您需要找到与您关注的所有movieid的引用,然后手动调整与这些匹配相对应的列表,然后使用新列表更新所有这些行。 这是一个额外的代码,浪费了大量的处理时间(它可能成为你的应用程序增长时的主要瓶颈),但它是可能的。
进行调整的最简单方法是在现有列表上进行字符串替换。 因此,一旦选择了当前列表,请执行以下操作:
$newList = str_replace($movie_id_to_delete.",", "", $oldList);
$result = mysql_query("UPDATE tbl_user_watchlist SET MovieIDs = '".$newList."' WHERE MovieIDs ='".$oldList."' AND UserID = ".$userid);
根据您的实现,检查$newList
是否为空可能是有意义的并删除整行(而不是像我上面那样更新MovieID)如果它是空的。
使用php或任何其他语言可以使用单个查询完成,您只需运行如下所述的单个查询,查询的详细参考是在链接中从SET字段中删除值的最佳方法?
查询应该是这样的,它涵盖逗号分隔列中的值,值或值,或仅包含值
UPDATE yourtable SET categories = TRIM(BOTH ',' FROM REPLACE( REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',') ) WHERE FIND_IN_SET('2', categories)
在这里你可以在where子句中找到你的条件。 有关详细信息,请参阅以上链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.