繁体   English   中英

使用php从数据库中的列中删除逗号分隔值的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM