我正在报告应用程序中给定页面集的访问结构。 这些页面组合在一起成为能力。如果一个ID有这个功能的任何一个页面我想记录一次能力ID和id,即使他们可能有几个页面提供访问权限。 使用下面的代码,它会写出每个用户(id)数千次,重载网站并填满表格。 我知道逻辑是有缺陷的,但我希望通过在循环中执行选择来检查是否存在id和能力(跳过插入)我可以消除表中的重复条目。它不起作用,我相信这可以更精简:
$ability_page_details1 = $DB_con2->prepare("SELECT PGD FROM PGD_DETAILS WHERE PGD = :pgd_ability1 AND SELECT_FLAG = 'Y'");
$ability_page_details1->bindParam(':pgd_ability1', $pgd_ability1);
$ability_page_details1->execute();
while($ability_content_page_row = $ability_page_details1->fetch(PDO::FETCH_ASSOC)) {
$pgd_page1 = $ability_content_page_row['PGD'];
//this is the page
//now lets work out all the Abilities that have this page
$ability_page_compare1 = $DB_con2->prepare("SELECT PGD.PNLNAME, AUTH.PNLITEMNAME,
PGD.SELECT_FLAG, AUTH.ACTIONS, AUTH.ID FROM PPGD INNER JOIN AUTH ON
PGD.PGDNAME = AUTH.PGDNAME WHERE PGD.PGDNAME = :pgdname_page1 AND AUTH.ACTIONS >0");
$ability_page_compare1->bindValue(':pgdname_page1', $pgdname_page1);
$ability_page_compare1->execute(array(':pgdname_page1'=>$pgdname_page1));
while($ability_page_compare_row1 = $ability_page_compare1->fetch(PDO::FETCH_ASSOC)) {
$id_ability1 = $ability_page_compare_row1['ID'];
//检查ID是否已有条目,如果没有则插入
$check_pm_for_abilities = $DB_con2->prepare("SELECT id, ability_id FROM validation_abilities WHERE id =:id");
$check_pm_for_abilities->execute(array(":id" => $id_ability1));
$check_pm_for_abilities_row=$check_pm_for_abilities->fetch(PDO::FETCH_ASSOC);
if($check_pm_for_abilities_row['classid']==$id_ability1 && $check_pm_for_abilities_row['ability_id']==$ability_id1) {
}
else{
//现在为插入
$validation_abilities = $DB_con2->prepare("INSERT INTO validation_abilities (id, validation_id, ability_id)
VALUES(:id, :validation_id, :ability_id)");
$validation_abilities->execute(array(":id" => $id_ability1, ":validation_id"=>$validation_id, ":ability_id"=>$ability_id1));
}