我已经失去了代码,并且不知道如何获得我需要以所需格式输出值的结果。
我在内部网站上有一个搜索功能,可以根据多个字符串查询MSSQL。例如,如果用户输入“CCENT MCSE”,则查询将返回具有经过认证的认证的所有用户。
要明确这将返回所有拥有CCENT证书或MCSE
的用户我的老板现在想通过使用操作符(+)将其更改为AND,这样当用户输入“CCENT + MCSE”时,查询应该返回拥有CCENT和MCSE认证的用户。
我构建查询的方法是将搜索字符串分解为引用+符号作为分隔符的数组。
我的SQL语句会撤回以下结果
Array
(
[0] => Array
(
[username] => mshort
[fname] => Matthew
[lname] => Short
[location_name] => CENTRAL REMOTE
[grade_name] => E6
[skill_name] => CCENT
)
[1] => Array
(
[username] => mark.parry
[fname] => Mark
[lname] => Parry
[location_name] => CENTRAL OFFICE
[grade_name] => E4
[skill_name] => MCSE Messaging
)
[2] => Array
(
[username] => mark.parry
[fname] => Mark
[lname] => Parry
[location_name] => CENTRAL OFFICE
[grade_name] => E4
[skill_name] => CCENT
)
)
在这种情况下需要做的是我只需要显示同时具有CCENT和MCSE的用户,并丢弃只有其中一个用户的用户。
在上面的示例中,我只需要输出Mark Parry并丢弃Matthew Short
我不知道该怎么做。你能帮忙吗?
由于
SQL语句
SELECT username,fname,lname,el.location_name, eg.grade_name,el.location_name
,sl.skill_nameFROM engineer e
INNER JOIN engineer_skills es ON e.id=es.engineer_id INNER JOIN skills_list sl ON es.skill_id=sl.id
INNER JOIN engineer_grades eg ON e.grade=eg.id
INNER JOIN engineer_location el ON e.location=el.id INNER JOIN team t ON e.team=t.id
WHERE e.id > 0 AND '.$sql_where.' ORDER BY lname'
$ sql_where就是这个 sl.skill_name LIKE'%“。$ search [$ i]。”%'OR
我删除了最后一个OR
答案 0 :(得分:0)
您可以过滤数组(假设它是名称$data
)
首先,按用户名模拟组
$result = array();
foreach($data as $item) {
if(!isset($result[$item["username"]])) $result[$item["username"]] = $item;
else $result[$item["username"]]["skill_name"].="+".$item["skill_name"];
}
其次,过滤结果
$filter = array("CCENT","MCSE");
function skill_and_filter($item) {
global $filter;
foreach($filter as $f) if(strpos($item["skill_name"],$f)===false) return false;
return true;
}
$result = array_filter($result,"skill_and_filter");