需要SQL速记 - PHP PDO

时间:2017-04-11 00:11:22

标签: php mysql mysqli pdo

好的我的眼睛受伤了:)有人建议用更短的方法来完成相同的代码吗?

以下变量的有效值可能是: $ ryg可以是:“all”,“r”,“y”或“g” $ region可以是:“all”,“na”,“emea”,“latam”或“apac”

我需要缩短/优化这个,但经过漫长的一天编码后,我的眼睛会受到伤害(难怪)

if(($region=="all")&&($ryg=="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0));
} else if(($region=="all")&&($ryg!="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,$ryg));
} else if(($region=="na")&&($ryg=="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"na"));
} else if(($region=="na")&&($ryg!="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"na",$ryg));
} else if(($region=="emea")&&($ryg=="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"emea"));
} else if(($region=="emea")&&($ryg!="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"emea",$ryg));
} else if(($region=="latam")&&($ryg=="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"latam"));
} else if(($region=="latam")&&($ryg!="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"latam",$ryg));
} else if(($region=="apac")&&($ryg=="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"apac"));
} else if(($region=="apac")&&($ryg!="all")) {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,"apac",$ryg));
} else {
  $sql_main= "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
  $stmt = $pdo->prepare($sql_main);
  $stmt->execute(array('y',0,$region));
}

我厌倦了切割和粘贴所有这些......

关于重写这个的最短路的想法?

提前致谢!!

1 个答案:

答案 0 :(得分:2)

这是减少代码的一种方法:

if ($region == "all" && $ryg == "all") {
    $sql_main = "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? ORDER BY data1_summary.projected_margin ASC";
    $stmt = $pdo->prepare($sql_main);
    $stmt->execute(array('y', 0));
} elseif ($region != "all" && $ryg != "all") {
    $sql_main = "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
    $stmt = $pdo->prepare($sql_main);
    $stmt->execute(array('y', 0, $region, $ryg));
} elseif ($region != "all" && $ryg == "all") {
    $sql_main = "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND project.region=? ORDER BY data1_summary.projected_margin ASC";
    $stmt = $pdo->prepare($sql_main);
    $stmt->execute(array('y', 0, $region));
} elseif ($region == "all" && $ryg != "all") {
    $sql_main = "SELECT * FROM project INNER JOIN data1_summary ON project.p_key = data1_summary.p_key_project WHERE project.active=? AND project.account_key=? AND data1_summary.overall_ryg=? ORDER BY data1_summary.projected_margin ASC";
    $stmt = $pdo->prepare($sql_main);
    $stmt->execute(array('y', 0, $ryg));
}

虽然您仍然可以对此进行优化,但您不必为每个区域或ryg添加条件。