我有这个查询并编码
if(isset($_REQUEST['main_task']) && ($_REQUEST['main_task'] !='')) {
$query_task = "SELECT * from manage_project_task where prj_task_name LIKE '%".$_REQUEST['main_task']."%' and prj_task_parent_id='0'";//Sort Main Task
} else {
$query_task = "SELECT * from manage_project_task where prj_task_project_id=$project_id and prj_task_parent_id='0'";//Sort Main Task
}
$SelectQuery = $query_task." LIMIT ".$start.",".$limit."";
$result_task = $db->GetALL($SelectQuery);
$cnt_task=count($result_task);
if ($db->Affected_Rows($result_task)>0)
{
for ($i=0;$i<$cnt_task;$i++) {
$actual_hours_worked=0;
$actual_hours_worked2=0;
// subtask hyperlink
if (isset($_REQUEST['sub_task']) && ($_REQUEST['sub_task'] !='')) {
$query_subtask1 = "SELECT * from manage_project_task where prj_task_parent_id='".$result_task[$i]['prj_task_id']."' AND prj_task_name LIKE '%".$_REQUEST['sub_task']."%'";
} else {
$query_subtask1 = "SELECT * from manage_project_task where prj_task_parent_id='".$result_task[$i]['prj_task_id']."'";
}
$result_subtask1 = $db->GetALL($query_subtask1);
$cnt_subtask1=count($result_subtask1);
}
}
这给了我串行模式的主任务和子任务。现在我已经取了2个文本字段1作为主任务,2作为子任务。如果我只在第二个文本字段中输入子任务,那么它会用它的主任务搜索子任务,但同时也会给出剩余的主任务,如
- 主要任务
- 子任务(第二个字段中的匹配字符串(
- 主要任务
- 主要任务
- 主要任务
- 主要任务
我认为这是因为第二个循环取决于第一个循环。所以我的问题是,hw只能得到与其主任务匹配的子任务,而不能得到其余的主任务??请提出任何解决方案。
在代码的第6行中,您覆盖了$query_task
变量,因此$_REQUEST['main_task']
没有区别。这就是为什么列出了每个主要任务,就像没有给出搜索字符串一样。
编辑:如果在第一个匹配任务中有3个匹配任务和2个子任务,则会得到您描述的结果。你要做的是:只使用那些有匹配子任务的任务。
让它变得简单:循环浏览匹配的任务(就像你做的那样(,但只有当你在其中找到匹配的子任务时,才将该任务添加到你想要显示的任务中。
$displayed_tasks = array();
/* Query for matching tasks */
foreach ($matched_tasks as $t)
{
/* Query for matching subtasks */
if (!empty($matched_subtasks))
{
$displayed_tasks[] = $t;
}
}
if (isset($_REQUEST['sub_task']) && ($_REQUEST['sub_task'] !='')) {
for ($i=0;$i<$cnt_task;$i++) {
$actual_hours_worked=0;
$actual_hours_worked2=0;
$query_subtask1 = "SELECT * from manage_project_task where prj_task_parent_id='".$result_task[$i]['prj_task_id']."' AND prj_task_name LIKE '%".$_REQUEST['sub_task']."%'";
$result_subtask1 = $db->GetALL($query_subtask1);
$cnt_subtask1=count($result_subtask1);
}
}
else {
for ($i=0;$i<$cnt_task;$i++) {
$actual_hours_worked=0;
$actual_hours_worked2=0;
$query_subtask1 = "SELECT * from manage_project_task where prj_task_parent_id='".$result_task[$i]['prj_task_id']."'";
$result_subtask1 = $db->GetALL($query_subtask1);
$cnt_subtask1=count($result_subtask1);
}
}