1

私は車のあるテーブルを持っています。各車には、別のテーブルに配置された 1 つ以上のチューニング ステージがあります。
調整段階のある表で。車の識別子があります: [cId] = 車の ID。

まず、車を複製し、新しく生成された ID を から に保存mysql_insert_id()$new_carIdます。
次に、車の識別子 [cId] に基づいて、関連付けられているすべてのチューニング ステージを取得し、車で行ったのと同じことを- ループで行いwhile()ます。

現在、複製された新しいステージには、古い車の [cId] が含まれています。複製されたステージが新しい車に割り当てられるように、
[cId] を格納されている ID に置き換える必要があります。$new_carId

私の見立てでは; 2 つのオプションがあります。 -query
で直接実行するINSERTか、-loopの最後で
sqlを実行します。UPDATEwhile()

これまでの私のコードは次のとおりです。

/**
 *  Duplicate an existing car with associated tuning stage:
 *  Each car may have more than one associated tuning stage located in a separate table. 
 *  We need to make sure all stages is duplicated as well, and assigned to the new car.
 *
 *  [cId] car id.
 *
 *  debug() is a personal debugging function.
 */
    if (isset($_POST['duplicate_car'])){
    #   duplicate the car.
        $orgCar_id = (int)mysql_real_escape_string($_POST['orgCar_id']);  //  ID of the car we make the duplicate from.
        $sql_car = 'INSERT INTO TUNE_cars (make, model, chassis, motor, motorkode, orgEff, orgNm, year, options, note)
            SELECT make, model, chassis, motor, motorkode, orgEff, orgNm, year, options, note FROM TUNE_cars WHERE cId = '.$orgCar_id;
        //  debug($sql_car);
        $qry_car = mysql_query($sql_car);
        $new_carId = (int)mysql_real_escape_string(mysql_insert_id());  //  We need to attach this ID to the new duplicated tuning stages.
    //
    /**
     *  Duplicate any associated tuning stages:
     *  We need to fetch all stages associated with the old car,
     *  duplicate them aswell, and attach them to the new car. 
     *
     *  [sId] stage id
     *  [cId] car id. This connects the stages to a given car.
     */
        #   fetch all stages associated with the old car.
            $sql_stages = 'SELECT sId FROM TUNE_stages WHERE cId = '.$orgCar_id;
            //  debug($sql_stages);
            $qry_stages = mysql_query($sql_stages);
        //
        #   duplicate the stages.
            while($get_stage = mysql_fetch_assoc($qry_stages)){
                $sql_dup_stage = 'INSERT INTO TUNE_stages (cId, stage, stageHp, stageNm, stagePrice, stageMethod, stageDyno, sinfo, snote)
                SELECT '.$new_carId.', stage, stageHp, stageNm, stagePrice, stageMethod, stageDyno, sinfo, snote FROM TUNE_stages WHERE sId = '.$get_stage['sId'];
                //  debug($sql_dup_stage);
                $qry_dup_stage = mysql_query($sql_dup_stage);
            //
            }
        //
    /**/
    }
/**/

ご覧のように; 私は最後の方法を使用しました:
-ループUPDATEの最後で実行しましたwhile()

これはもっと簡単にできると信じており、提案を受け付けています...

4

1 に答える 1