繁体   English   中英

大型MySQL查询和插入

[英]Large MySQL query and insert

嘿,每个人都在这里以及php刚接触过它,大约2个月的学习时间就跟我一样。 我现在需要做的是从数据库中大约16个不同的表中获取数据并复制这些表。 该表适用于申请人,并且具有通用的应用程序ID或公共的家庭ID,这些ID只是生成的哈希值。 我现在所做的是分别查询每个表,然后使用数据进行插入,只是更改应用程序ID和/或家庭ID。 有些表很大,我试图找到一种更简单,更快捷的方法来完成此操作,这是为我的一张表编写的一个示例。

  <? //get family info based on application id $queryC="SELECT Fam_Type, Fam_Title, Fam_SSNI20, Fam_SSNI20_Select, Fam_Name_First, Fam_Name_Middle, Fam_Name_Last, Fam_Name_Suffix, Fam_Gender, Fam_DOB, Fam_Disabled, Fam_Addy1, Fam_Addy2, Fam_City, Fam_State_Prov, Fam_Zip, Fam_Country, Fam_Home_Phone, Fam_Work_Phone, Fam_Work_Phone_Ext, Fam_Cell_Phone, Fam_Occupation, Fam_Employer, Fam_Primary_Res, Fam_Custody, Fam_Guard_Excuse, Fam_ChiDep_Ans, Fam_ReaVeh_Ans, InstructDone, SetDone, AppDone, HouDone, DepDone, AssDone, ReaDone, IncDone, ExpDone, QueDone, ApplicationDone, StatusDone, Fam_Init, Fam_Start_Date, Fam_End_Date, Fam_Agree, username, password, email, Fam_Letter, Exp_Educational, Fam_Tax, Scan_FileNames, Scan_Descriptions, Fam_Complete, referral, Fam_Holds, appealed, Appeal_Letter, Appeal_Viewed, taxDocuments FROM familY WHERE familyID='$famid' AND applicationID='$appid'"; $resultC = mysql_db_query($aidDB, $queryC, $connection); echo $queryC; while($rC=mysql_fetch_array($resultC)){ $Fam_Type="$rC['0']"; $Fam_Title="$rC['1']"; $Fam_SSNI20="$rC['2']"; $Fam_SSNI20_Select="$rC['3']"; $Fam_Name_First="$rC['4']"; $Fam_Name_Middle="$rC['5']"; $Fam_Name_Last="$rC['6']"; $Fam_Name_Suffix ="$rC['7']"; $Fam_Gender="$rC['8']"; $Fam_DOB="$rC['9']"; $Fam_Disabled="$rC['10']"; $Fam_Addy1 ="$rC['11']"; $Fam_Addy2 ="$rC['12']"; $Fam_City="$rC['13']"; $Fam_State_Prov="$rC['14']"; $Fam_Zip="$rC['15']"; $Fam_Country="$rC['16']"; $Fam_Home_Phone ="$rC['17']"; $Fam_Work_Phone ="$rC['18']"; $Fam_Work_Phone_Ext="$rC['19']"; $Fam_Cell_Phone ="$rC['20']"; $Fam_Occupation ="$rC['21']"; $Fam_Employer="$rC['22']"; $Fam_Primary_Res ="$rC['23']"; $Fam_Custody="$rC['24']"; $Fam_Guard_Excuse ="$rC['25']"; $Fam_ChiDep_Ans ="$rC['26']"; $Fam_ReaVeh_Ans="$rC['27']"; $InstructDone ="$rC['28']"; $SetDone ="$rC['29']"; $AppDone ="$rC['30']"; $HouDone ="$rC['31']"; $DepDone ="$rC['32']"; $AssDone="$rC['33']"; $ReaDone ="$rC['34']"; $IncDone ="$rC['35']"; $ExpDone ="$rC['36']"; $QueDone="$rC['37']"; $ApplicationDone ="$rC['38']"; $StatusDone ="$rC['39']"; $Fam_Init="$rC['40']"; $Fam_Start_Date ="$rC['41']"; $Fam_End_Date ="$rC['42']"; $Fam_Agree ="$rC['43']"; $username ="$rC['44']"; $password ="$rC['45']"; $email ="$rC['46']"; $Fam_Letter="$rC['47']"; $Exp_Educational ="$rC['48']"; $Fam_Tax ="$rC['49']"; $Scan_FileNames="$rC['50']"; $Scan_Descriptions ="$rC['51']"; $Fam_Complete ="$rC['52']"; $referral="$rC[''53]"; $Fam_Holds="$rC['54']"; $appealed="$rC['55']"; $Appeal_Letter="$rC['56']"; $Appeal_Viewed="$rC['57']"; $taxDocuments="$rC['58']"; 
//insert into family with new applicationid
$queryC2="INSERT INTO family (familyID, applicationID, Fam_Type, Fam_Title, Fam_SSNI20, Fam_SSNI20_Select, Fam_Name_First, Fam_Name_Middle, Fam_Name_Last, Fam_Name_Suffix, Fam_Gender, Fam_DOB, Fam_Disabled, Fam_Addy1, Fam_Addy2, Fam_City, Fam_State_Prov, Fam_Zip, Fam_Country, Fam_Home_Phone, Fam_Work_Phone, Fam_Work_Phone_Ext, Fam_Cell_Phone, Fam_Occupation, Fam_Employer, Fam_Primary_Res, Fam_Custody, Fam_Guard_Excuse, Fam_ChiDep_Ans, Fam_ReaVeh_Ans, InstructDone, SetDone, AppDone, HouDone, DepDone, AssDone, ReaDone, IncDone, ExpDone, QueDone, ApplicationDone, StatusDone,  Fam_Init, Fam_Start_Date, Fam_End_Date, Fam_Agree, username, password, email, Fam_Letter, Exp_Educational, Fam_Tax, Scan_FileNames, Scan_Descriptions, Fam_Complete, referral, Fam_Holds, appealed, Appeal_Letter, Appeal_Viewed, taxDocuments   )
    VALUES
    (
     '$newfam1id,'        
     '$newappid,'
     '$Fam_Type,' 
     '$Fam_Title,'
     '$Fam_SSNI20,'
     '$Fam_SSNI20_Select,'
     '$Fam_Name_First,'
     '$Fam_Name_Middle, '
     '$Fam_Name_Last,'
     '$Fam_Name_Suffix,'
     '$Fam_Gender,' 
     '$Fam_DOB,'
     '$Fam_Disabled,'
     '$am_Addy1,' 
     '$Fam_Addy2,' 
     '$Fam_City,'
     '$Fam_State_Prov,'
     '$Fam_Zip,'
     '$Fam_Country,'
     '$Fam_Home_Phone,'
     '$Fam_Work_Phone, '
     '$Fam_Work_Phone_Ext,'
     '$Fam_Cell_Phone,'
     '$Fam_Occupation,'
     '$Fam_Employer,'
     '$Primary_Res,'
     '$Fam_Custody,' 
     '$Fam_Guard_Excuse,'
     '$Fam_ChiDep_Ans,'
     '$Fam_ReaVeh_Ans,' 
     '$InstructDone,' 
     '$SetDone,'
     '$AppDone,'
     '$HouDone,'
     '$DepDone,'
     '$AssDone,'
     '$ReaDone,'
     '$IncDone,'
     '$ExpDone,'
     '$QueDone,'
     '$ApplicationDone,'
     '$StatusDone,' 
     '$Fam_Init,' 
     '$Fam_Start_Date,'
     '$Fam_End_Date,'
     '$Fam_Agree,' 
     '$username,'
     '$password,'
     '$email,'
     '$Fam_Letter,'
     '$Exp_Educational,'
     '$Fam_Tax,'
     '$Scan_FileNames,' 
     '$Scan_Descriptions,'
     '$Fam_Complete,' 
     '$referral,' 
     '$Fam_Holds,' 
     '$appealed,' 
     '$Appeal_Letter,' 
     '$Appeal_Viewed,' 
     '$taxDocuments'   
    )"; echo $queryC2;

     }



 ?>

您不需要循环所有行。
用这个:

Insert into new_table select * from old_table where {your criteria here}

mysql已将INSERT into table (fields,list) SELECT fields,list FROM another_table

您可以简单地执行以下操作:

INSERT INTO family ( appliction_id, all_the_other_fields )
SELECT 'your_new_app_id', all_the_other_fields  
FROM familY
WHERE familyID='$famid' AND applicationID='$appid'

我们希望您的$ famid和$ appid变量能被转义,对吗?

您可以使用mysql_fetch_assoc()而不是array来减少SELECT方面的PHP代码量,尤其是因为您只需要将返回的数组块重新分配给各个变量:

$query = "SELECT Fam_Type, Fam_Title, Fam_SSNI20, Fam_SSNI20_Select etc... etc...";
$resultC = mysql_db_query($aidDB, $queryC, $connection); echo $queryC;
while($rC = mysql_fetch_assoc($resultC)) {
   ...
}

至此,您最终获得了关联的数组,可以通过以下方式获得各个值:

echo "Fam_Type is " . $rc['Fam_Type'];
echo "Fam_Title is " . $rc['Fam_Title'];

这样可以节省大量的变量分配时间。 当然,如果查询中的任何字段将在内部映射到相同的名称(例如,您正在执行联接并从两个不同的表中检索两个不同的“ id”字段),则需要为它们添加别名不同的名称,以便它们在数组中清晰地显示出来,但这是查询的简单mod:

SELECT table1.id AS table1_id, table2.id AS table2_id ...

这将导致:

$result['table1_id'] = ...

作为副节点,您应始终检查查询是否成功。 您盲目地认为它有效,并尝试检索数据。 但是,如果查询失败,则mysql函数将返回FALSE,这将不是有效的结果语句,并且会中断您的提取尝试。 至少要添加一些基本的错误检查

$resultC = mysql_db_query(...) or die("MySQL error: " . mysql_error());

这将吐出错误消息并解释查询失败的原因,而不是随后失败并显示“ ...不是有效的语句句柄”。 同样,从PHP 5.3开始不推荐使用mysql_db_query() ,它将在将来的某些PHP版本中消失。 可能想改用常规的mysql_query()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM