0

データベースに、UserIDとMovieIDのような2つのフィールドを含むテーブルがあります。私はphpでテーブルを挿入および更新するための関数を作成しました。ここで、MovieIDは、コンマで区切られた多くの値を含む可能性のあるフィールドです。同様に、テーブルから値を削除するための関数、挿入および更新に使用する関数が必要です。表の値は次のようになります。

<?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

これを行う正しい方法は、物事を2つのテーブルに分けることです。カンマ区切りのリストを保持しない場合を除いて、現在のテーブルのすべての情報を保持します。代わりに、もう一方のテーブルには2つの列があり、1つはそれが属するリストを指定します(たとえば、最初のテーブルの行の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、またはコンマ区切りの列の値のみをカバーする次のようにする必要があります

yourtableを更新する
セットする
  カテゴリ=
    TRIM(BOTH'、' FROM
      交換(
        REPLACE(CONCAT('、'、RE​​PLACE(col、'、'、',,')、'、')、'、2、'、'')、',,'、'、')
    )。
どこ
  FIND_IN_SET( '2'、categories)

ここでは、where句で条件を設定できます。詳細については、上記のリンクを参照してください。

于 2016-04-15T22:10:08.400 に答える