【发布时间】:2017-04-11 00:11:22
【问题描述】:
好吧,我的眼睛受伤了 :) 有人建议用更短的方法来完成相同的代码吗?
以下变量的有效值可能是: $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));
}
我已经厌倦了只是剪切和粘贴所有这些......
关于重写这个的最短方法的想法?
提前致谢!!
【问题讨论】:
-
这不是编程。这是混乱。你真的需要阅读循环。 Like right now. 当您看到重复时,这表明您需要将其折叠成某种循环结构。为可能的值创建一个
array并对其进行迭代。 -
:) 谢谢。我和你在一起。
-
这里的策略是找出哪些部分发生了变化,哪些部分是固定的,然后制作某种查找表,根据特定的区域/ryg 对定义要进行哪些修改。
-
谢谢塔德曼。这些是我正在寻找的想法,我会想办法解决的。感谢您的反馈。
-
当你得到它时,如果没有其他人参与,我鼓励你发布一个自我回答。这将有助于演示如何将这个怪物变成简单且可维护的东西。祝你好运!