【发布时间】:2014-01-09 17:00:02
【问题描述】:
我的代码盲了,不知道如何获得需要以所需格式输出值的结果。
我在一个内部网站上有一个搜索功能,它根据多个字符串查询 MSSQL。例如,如果用户输入“CCENT MCSE”,查询将返回所有具有任一认证的用户。
需要明确的是,这将返回所有拥有 CCENT 证书或 MCSE 的用户
我的老板现在想通过使用运算符 (+) 号将其更改为 AND,因此当用户输入“CCENT+MCSE”时,查询应该返回具有 CCENT AND 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_这是在哪里 sl.skill_name LIKE '%".$search[$i]."%' OR
然后我去掉最后一个 OR
【问题讨论】:
-
查询是什么样的?
-
为什么不在值周围使用引号?
-
显示表结构和生成的 SQL 会很有帮助
-
而不是尝试使用结果,只需将查询更改为
AND。 -
我的 SQL 语句是这个'SELECT username,fname,lname,el.location_name, eg.grade_name,el.location_name,sl.skill_name FROM 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 例如 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 is this sl.skill_name LIKE '%".$search[$i]."%' OR and I strip the last OR