0

「本の著者」というテーブルにリンクされた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ループの外側で機能する理由を理解できませんが、内部では何もしません(エラーは生成されません)。

4

1 に答える 1

2

あなたは次のようなことをすることができませんでした:

UPDATE `book authors`, authors 
SET `book authors`.newauthorid = authors.newauthorid 
WHERE `book authors`.authorid = authors.authorid;

ループする代わりに?

于 2012-09-18T19:57:22.417 に答える