【问题标题】:search mysql database using more keywords using php使用 php 使用更多关键字搜索 mysql 数据库
【发布时间】:2013-10-29 11:20:34
【问题描述】:

基于种姓、宗教、位置、性别、年龄,我需要从我的数据库中过滤数据,我该怎么做。

在 mysql 数据库中,我将宗教、性别、位置、年龄作为同一表中的单独列。

我用过的代码

$result=mysql_query("SELECT * FROM enquiry where location like '%$text%'and gender like'%$text1%' ")
                                                          or        die("error"); 
$found=mysql_num_rows($result); 

if($found>0){ 
 while($row=mysql_fetch_array($result)){ 
 //display of data 
  } 

使用它,我可以使用一个关键字从一列中搜索数据...因为我是新手,请给我正确的方法来使用 php 解决这个问题。

【问题讨论】:

  • or someothercolumn like '%$text%' 怎么样?
  • 我不明白你的问题...
  • 或...location REGEXP "text1|text2|text3"location in ('text1','text2','text3')
  • 我从用户表单获取数据作为文本。我必须从位置为文本且性别为 text1 的数据库中选择数据,依此类推...@ gloomy.penguin

标签: php mysql search


【解决方案1】:

使用 OR 运算符

$result=mysql_query("SELECT * FROM enquiry where location like '%$text%' OR caste like '%$text%' OR religion like '%$text%' OR gender like '%$text%' OR age like '%$text%'")
                                                          or        die("error"); 
$found=mysql_num_rows($result); 

if($found>0){ 
 while($row=mysql_fetch_array($result)){ 
 //display of data 
  } 

【讨论】:

  • 我需要在所有这些字段中搜索不同的文本...我必须将文本与位置匹配,将文本 1 与性别等...从数据库中过滤数据...这些文本,text1 是我从用户搜索表单中获得的项目....@selite
【解决方案2】:

在这里尝试创建动态查询是示例查询,您可以根据需要进行详细说明。这里我假设您正在通过表单从用户那里获取要搜索的数据。

现在我们要做的就是检查用户是否填写了特定字段并相应地创建查询。这样您的查询就不会不必要地复杂。

   $sql = "SELECT * FROM table_name ";

   if( isset($_REQUEST['location']) && $_REQUEST['location'] != '' ){
        if( strpos($sql, "WHERE") ){
             $sql .= "AND WHERE location like '%$text%'";
        }else{
             $sql .= "WHERE location like '%$text%'";
        };           
   }

   if( isset($_REQUEST['religion']) && $_REQUEST['religion'] != '' ){
       if( strpos($sql, "WHERE") ){
            $sql .= "AND WHERE religion like '%$text%'";
       }else{
            $sql .= "WHERE religion like '%$text%'";
       }
   }

   $result=mysql_query( $sql ) or die("error"); 

【讨论】:

  • 我需要在所有这些字段中搜索不同的文本...我必须将文本与位置、text1 与性别等进行匹配...从数据库中过滤数据...这些文本,text1 是我从用户搜索表单中获取的项目。 ......为此,我使用了我发布的代码,但似乎有错误@nikhil
  • anya 代码做的事情和你要求的完全一样,它匹配文本和位置,文本 1 和宗教。只有当用户指定一些细节时才会生成 MySQL "WHERE" 子句。"AND" 子句确保只返回满足所有类别的结果。不过,如果您的要求是其他东西,请尝试详细描述它
【解决方案3】:

试试这样的全文搜索:-

$q="your search value";    
$searchArray = explode(" ", $q);
$query="SELECT * FROM cmusers WHERE  MATCH (`firstname`, `lastname`,`email`) AGAINST ('";
$i=0;
foreach ($searchArray as $word) {
    $query .= "*".$word."* ";
}
$query .= "' IN BOOLEAN MODE)";

这将针对所有列搜索所有关键字 但是这个需要表myisamengine 默认情况下,大多数表都带有 innoDB 引擎,因此您可以通过此更改引擎

ALTER TABLE table_name ENGINE = MYISAM;

【讨论】:

  • 值得指出的是,除了支持全文搜索之外,myisam 表的持久性也较差,并且不是完全事务性的……如果您习惯于 innodb,则规则会发生变化。许多人使用单独的服务进行搜索,例如弹性搜索,与 MySQL 全文搜索相比,它通常具有改进的性能和设施。
【解决方案4】:

我也遇到了同样的问题,并想出了以下解决方案。

//Building the Query
 if (!empty($_POST['location'])) {
      $location=$_POST['location'];
      $sql[] = "enquiry.location = '%$location%'";
  }
  if (!empty($_POST['religion'])) {
      $religion=$_POST['religion'];
      $sql[] = "enquiry.religion = '%$religion%' ";
  }
  if (!empty($_POST['gender'])) {
      $gender=$_POST['gender'];
      $sql[] = "enquiry.gender LIKE '%$gender%'";
  }
    //etc...
    if (!empty($sql)) {
        $built_query = "SELECT * FROM `enquiry`";
        //This implodes the sql array creating the WHERE statement with appended AND statements
        $built_query .= " WHERE " . implode(' AND ', $sql);
    } else {
        $built_query = "SELECT * FROM `enquiry`";   
        }
    $result = mysqli_query($conn, $built_query);
    $total_records=$result->num_rows;    
    if ($total_records < 1) {
        echo "No records found";
    } else {
        while ($row_result = $result->fetch_assoc()) {  
          //Whatever you want to do with the data
        }

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 2013-04-08
    • 2012-09-20
    • 2011-08-24
    • 2010-11-02
    • 2013-04-25
    • 2012-12-28
    相关资源
    最近更新 更多