mysql和/或查询一起运行

时间:2010-07-13 13:01:18

标签: mysql

我需要创建一个搜索引擎,用户可以从表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']."'";

- 但它不起作用?

4 个答案:

答案 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++;
}