我有一个用于安排现场技术人员的数据库。每个现场技术都有自己独特的登录ID,只能看到自己的特定工作。我最近添加了将多个技术添加到单个故障单的功能。我目前正在运行以下循环。每个技术人员目前都能看到他独自分配的每项工作。当我开始分配多个技术时,它变得棘手。假设我总共有3个技术人员:米奇,达斯汀和迈克尔。
如果我为迈克尔和达斯汀分配一份工作作为一项多技术工作,那么在两个技术名单中都显得很好。如果我再为米奇和达斯汀分配另一份工作。我之前为Dustin分配的多项技术工作从他的名单中消失,但仍然在Michaels上展示。
我假设有些东西被卷入了循环,但我无法搞清楚。我是一个菜鸟。需要帮助。
$gettechresult = mysql_query("SELECT tech_id2, tech_id FROM jobs WHERE ((status = '2')) ORDER by $listsort;",$link);
while ($p_row =mysql_fetch_array ($gettechresult) ) {
$tech_id2 = $p_row[tech_id2];
$tech_id = $p_row[tech_id];
$fids = explode(",",$tech_id2);
$fids2 = explode(",",$tech_id);
if (in_array($l_tech_id, $fids))
{
$techteam = 'TRUE';
}
else{
$techteam = 'False';
}
/// Used to make sure the query is not returning False Values
echo "$techteam,";
if ($grp_all == "1")
{
$jobresult = mysql_query("SELECT * FROM jobs WHERE ((status = '2')) ORDER by $listsort;",$link);
}
elseif ((in_array($l_tech_id, $fids)))
{
$jobresult = mysql_query("SELECT * FROM jobs WHERE ((tech_id2 ='$l_tech_id' AND status = '2' || tech_id2 IN ('".$fids."') AND status = '2')) ORDER by $listsort;",$link);
}
}
以下是我当前结果This is an image of the scheduled jobs currently in the database
的图片Image of Field tech Dustin's Scheduled List - $l_tech_id = 16
唯一没有正确报告的工作是Mickey和Dustin是Multiple Techs。达斯汀是唯一没有报告一份工作的人。 $ tech_id2是将此信息捕获为数组的字段。
答案 0 :(得分:0)
只要where
具有2个或更多值的组合,并且测试值不是列表中的第一个,SQL tech_id2 ='$l_tech_id'
条件tech_id2
将为false。
相反,我建议使用MySql find_in_set
函数:
where find_in_set(?, tech_id2) and status = 2
完成设置后,可以从PHP中删除相应的处理逻辑。
如果你选择这个tech_id2
解决方案,那么就放弃使用tech_id
,否则每个引用的真正意义就会变得一团糟。
注意:我故意在提议的SQL中添加?
,因为您确实应该使用prepared statements来避免SQL injection。 ?
代表$l_tech_id
值。
另外,请考虑moving away from mysql_
functions,因为它们已被弃用多年,并且在PHP 7.x中不再受支持。