我需要创建一个搜索引擎,用户可以从表fsb_profile字段中按名称,课程,成员,年份(文本字段)搜索profile_name,profile_course,profile_member,profile_year
搜索将与任何一个字段 要么 搜索将与所有领域 要么 搜索将包含多个字段 - 如何只使用一个查询? 我正在编写代码: -
$query="select * from fsb_profile
where profile_name = '".$_REQUEST['name']."'
and profile_member= '".$_REQUEST['type']."'
and profile_year= '".$_REQUEST['year']."'
and profile_course='".$_REQUEST['course']."'
or profile_name = '".$_REQUEST['name']."'
or profile_member= '".$_REQUEST['type']."'
or profile_year= '".$_REQUEST['year']."'
or profile_course='".$_REQUEST['course']."'";
- 但它不起作用?
答案 0 :(得分:0)
尝试此查询。使用此查询,您可以使用搜索因子的组合提取详细信息
$query="select * from fsb_profile
where profile_name = '".$_REQUEST['name']."'
or profile_member= '".$_REQUEST['type']."'
or profile_year= '".$_REQUEST['year']."'
or profile_course='".$_REQUEST['course']."'";
答案 1 :(得分:0)
如果我理解正确,您想要搜索以使所有字段匹配或至少两个字段匹配?
在这种情况下,我会尝试以下方法:
$query="select * from fsb_profile
where
(
profile_name = '".$_REQUEST['name']."'
and profile_member= '".$_REQUEST['type']."'
and profile_year= '".$_REQUEST['year']."'
and profile_course='".$_REQUEST['course']."'
)
OR
(
(
profile_name = '".$_REQUEST['name']."'
AND
(
profile_member= '".$_REQUEST['type']."' OR
profile_year= '".$_REQUEST['year']."' OR
profile_course='".$_REQUEST['course']."'"
)
)
OR
(
profile_member= '".$_REQUEST['type']."'
AND
(
profile_year= '".$_REQUEST['year']."' OR
profile_course='".$_REQUEST['course']."'"
)
)
OR
(
profile_year= '".$_REQUEST['year']."' AND
profile_course='".$_REQUEST['course']."'"
)
)
返回所有条件匹配的所有集合或至少两个其他条件匹配的组合。我没有尝试过这个,但这就是我的开始。
答案 2 :(得分:0)
如果填写了信息,您需要添加一些If语句以仅包含搜索条件。
$query = "select * from fsb_profile"<br />
$subquery = ""<br />
If($_REQUEST['name') != "") {<br />
if($subquery == "") $subquery = "where "<br />
else $subquery .= "and "<br />
<br />
$subquery .= "profile_name = '" . $_REQUEST['name']<br/>
}
$query .= $subquery
您可以继续为所有项目执行此操作。请注意,您可以使用for语句,我强烈建议参数化搜索字符串以防止SQL注入攻击。为简洁起见,我在这里只提供了一些代码。
这将搜索指定用于查找结果的所有条件。
答案 3 :(得分:0)
首先,我建议您清理输入数据。您不应该将用户输入的数据放入SQL查询中而不进行检查;那只是在惹麻烦。
至于你的问题,你的语句中的逻辑(AND和OR)似乎有问题。使用您正在使用的语句,您将获得与搜索引擎中输入的所有四个字段匹配的所有记录,以及与输入的四个字段中的任何一个匹配的所有记录。您可能最好只是动态构造查询字符串,如:
$arr = sanitize_data($_REQUEST);
$query = "select * from fsb_profile ";
$count = 0;
if ( isset($arr['name']) ) {
$query .= (($count > 0)?"and":"where")." profile_name = '".$arr['name']."' ";
count++;
}
if ( isset($arr['type']) ) {
$query .= (($count > 0)?"and":"where")." profile_member = '".$arr['type']."' ";
count++;
}
if ( isset($arr['year']) ) {
$query .= (($count > 0)?"and":"where")." profile_year = '".$arr['year']."' ";
count++;
}
if ( isset($arr['course']) ) {
$query .= (($count > 0)?"and":"where")." profile_course = '".$arr['course']."' ";
count++;
}