0

我的数据库中有一个表,其中包含两个字段,例如 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";
}


}
4

2 回答 2

2

正确的做法是将事物分成两个表。一个人会保存当前表中的所有信息,但它不会保存逗号分隔的列表。相反,另一个表将有两列,一列指定它属于哪个列表(例如,第一个表中行的 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)可能是有意义的。

于 2012-05-14T17:45:25.580 回答
1

使用 php 或任何其他语言可以通过单个查询来完成,您只需要运行如下所述的单个查询,查询的详细参考在链接 中从 SET 字段中删除值的最佳方法?

查询应该是这样的,它涵盖 ,value 或 value,或仅包含逗号分隔列中的值

更新你的表
放
  类别 =
    修剪(两个','从
      代替(
        REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
    )
在哪里
  FIND_IN_SET('2', 类别)

在这里,您可以在 where 子句中找到您的条件。有关更多详细信息,请参阅上面的链接。

于 2016-04-15T22:10:08.400 回答