PHP/MySQLで私より賢明な人のインスピレーションを探しています。アレイアップデートの操作方法
データベースアプリケーションがあり、この例では2つのプライマリテーブルと1つの子テーブルがあります。
プライマリ表1 - 文書は プライマリ表2 - JobDesriptions 子表 - LnkDocuments_JobDescriptions、タイトルが示すように文書およびジョブ説明表の間、多くのリレーショナルテーブルへの1つです。私のドキュメントテーブルでは、私はJobDescriptionsのルックアップで、チェックボックスとしてオプションを提示するフィールドを持っています。このフィールドはアプリケーションが動作する方法のために 'AppliesTo'と呼ばれ、フィールドは結果を文字列、 2,3,4,5)explode関数を使ってこれを配列に変換し、各レコードを子テーブルに挿入しました。私は1-2の関係を好むので、これは私のコードです。 。作品
$jdarray = explode(',',$values['AppliesTo']);
foreach($jdarray as $item)
{
$sql2 = "INSERT INTO LnkDocuments_JobDescriptions (DocumentFk, JobDescriptionFk)
values ('".$keys["DocumentPk"]."', '$item')"; CustomQuery($sql2);
}
私は今、そのテーブルが更新された場合、私はまた、子テーブルを更新する必要があるということです持っている問題を、私はこのコードを試してみました(が、すぐにそれが間違っていることに気づい):
$jdarray = explode(',',$values['AppliesTo']);
foreach($jdarray as $item)
{
$sql = "SELECT * FROM LnkDocuments_JobDescriptions WHERE DocumentFk='".$keys["DocumentPk"]."' AND JobDescriptionFk='$item'"; ;
$num_rows = mysql_num_rows(CustomQuery($sql));
if ($num_rows > 0) //Delete Record
{
$sql2 = "DELETE FROM LnkDocuments_JobDescriptions WHERE DocumentFk='".$keys["DocumentPk"]."' AND JobDescriptionFk='$item'"; CustomQuery($sql2);
echo "JD FK : ".$item." deleted";
}
else //Insert Record
{
$sql3 = "INSERT INTO LnkDocuments_JobDescriptions (DocumentFk, JobDescriptionFk)
values ('".$keys["DocumentPk"]."', '$item')"; CustomQuery($sql3);
echo "JD FK : ".$item." added";
}
}
配列の相違点を比較する必要があることが私には分かりましたが、これを行う方法を手がかりにしていませんでしたが、これが私の必要とするものです:
$ oldarrayと$ new配列を比較すると、例
値が1,2,3,4あって$ newarrayに値1,2,3,5があった場合は、コードがループして変更があるかどうかを確認したい、例えば古い配列と新しい配列に値が存在する場合は何もしません。古い配列に値が存在し、新しい配列ではなく新しい配列に値が存在する場合は削除します。
関連するすべてのレコードを削除してもう一度追加することも考えましたが、これは悪い習慣であり、高いプライマリキーになります。私の例ではわずか5つのオプションしかありません。テストのためだけに、実際には数十もあるかもしれません。事前
私はすべてのコードを徹底的に見ていませんでしたが、うまくいくはずです。何が問題なのですか? – Technoh
私が使用したコードの問題は、違いを比較しないで新しいレコードを挿入することですが、新しい配列で削除されたかどうかを考慮せず、既存のレコードがすべて削除されます。 – user5641678
私はあなたが達成しようとしていることを、ありがとう。 – Technoh