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

标签 php mysql

我的数据库中有一个表,其中包含两个字段,例如 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 - 使用php从数据库列中删除逗号分隔值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587264/

相关文章:

java - "ERROR: You have an error in your SQL syntax;"in hibernate 一对多关系映射

php - 函数返回空数据

PHPStorm 7 在 Windows 上找不到 PHP 解释器

php - Laravel 5 - 验证 Mime 类型

php - 从 mysql 选择表时编码错误

php - SQL 查询不更新数据

mysql - 获取过去三年内发出请求的所有用户

php - 使用PHP从网页获取json数据

PHP、PDO、MySQL,通知 : Trying to get property of non-object

javascript - jquery 响应后无法重新加载 dataTable