私は車のあるテーブルを持っています。各車には、別のテーブルに配置された 1 つ以上のチューニング ステージがあります。
調整段階のある表で。車の識別子があります: [cId] = 車の ID。
まず、車を複製し、新しく生成された ID を から に保存mysql_insert_id()
し$new_carId
ます。
次に、車の識別子 [cId] に基づいて、関連付けられているすべてのチューニング ステージを取得し、車で行ったのと同じことを- ループで行いwhile()
ます。
現在、複製された新しいステージには、古い車の [cId] が含まれています。複製されたステージが新しい車に割り当てられるように、
[cId] を格納されている ID に置き換える必要があります。$new_carId
私の見立てでは; 2 つのオプションがあります。 -query
で直接実行するINSERT
か、-loopの最後で
sqlを実行します。UPDATE
while()
これまでの私のコードは次のとおりです。
/**
* 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()
。
これはもっと簡単にできると信じており、提案を受け付けています...