「本の著者」というテーブルにリンクされた2つのテーブル(著者と本)。
「本の著者」テーブルには、BookAuthorID、AuthorID、BookIDが含まれています。つまり、同じ著者の複数の本を作成することができ、それらを一致させるのは簡単です。
残念ながら、authorsテーブルのIDフィールドをめちゃくちゃにして、プライマリおよび自動インクリメントである新しいフィールドを作成しました。次に、「book authors」テーブルの一致する列に新しいIDを入力し、古いIDと一致させる必要があります。
「本の著者」テーブルを更新する次の関数があります...
function update_id($BookAuthorID, $NewAuthorID) {
$result = mysql_query("UPDATE `book authors` SET NewAuthorID='$NewAuthorID' WHERE BookAuthorID='$BookAuthorID'") or trigger_error(mysql_error()); }
この関数と2つの変数例($ BookAuthorID、$ NewAuthorID)を使用して空白のページを作成し、テーブルを正しく更新してテストしたので、この関数が機能することはわかっています。
これで、各著者のすべてのインスタンスを検索する次のコードがあり、各本のforeachループがIDと一致します...
$result = mysql_query("SELECT * FROM authors");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$AuthorID= $row["AuthorID"];
$match = get_books($BookID);
foreach ($match as $value) {
update_id($value["BookAuthorID"], $value["NewAuthorID"]);
}
}
get_books関数は次のとおりで、サイトの残りの部分で機能します。
function get_books($id) {
$result = mysql_query("SELECT * FROM `book authors` WHERE AuthorID= $id") or trigger_error(mysql_error());
$array = array();
while($row_ids = mysql_fetch_assoc($result)){
$array[] = $row_ids;
}
return $array;
}
関数がforeachループの外側で機能する理由を理解できませんが、内部では何もしません(エラーは生成されません)。