Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php使用更多关键字搜索mysql数据库_Php_Mysql_Search - Fatal编程技术网

使用php使用更多关键字搜索mysql数据库

使用php使用更多关键字搜索mysql数据库,php,mysql,search,Php,Mysql,Search,基于种姓、宗教、地点、性别、年龄,我需要从数据库中筛选数据,我应该如何做 在mysql数据库中,宗教、性别、位置、年龄作为同一个表中的独立列 我用过的代码 $result=mysql_query("SELECT * FROM enquiry where location like '%$text%'and gender like'%$text1%' ") or die

基于种姓、宗教、地点、性别、年龄,我需要从数据库中筛选数据,我应该如何做

在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运算符

$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 
  } 

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

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

   $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"); 

请按以下方式尝试全文搜索:-

$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)";
这将根据所有列搜索所有关键字 但这需要表
myisam
engine
默认情况下,大多数表都带有innoDB引擎,所以您可以通过此更改引擎

ALTER TABLE table_name ENGINE = MYISAM;

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

//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
        }
//生成查询
如果(!空($_POST['location'])){
$location=$_POST['location'];
$sql[]=“enquiry.location='%$location%'”;
}
如果(!空($_POST['religation'])){
$religure=$_POST['religure'];
$sql[]=“enquiry.relighty='%$relighty%'”;
}
如果(!空($_POST['gender'])){
$gender=$_POST['gender'];
$sql[]=“inquiry.gender类似“%$gender%””;
}
//等等。。。
如果(!empty($sql)){
$build_query=“从‘查询’中选择*”;
//这会使sql数组内爆,从而创建带有附加AND语句的WHERE语句
$build_query.=“WHERE.”内爆('AND',$sql);
}否则{
$build_query=“从‘查询’中选择*”;
}
$result=mysqli\u查询($conn,$build\u查询);
$total_records=$result->num_行;
如果($total_records<1){
回显“未找到记录”;
}否则{
而($row\u result=$result->fetch\u assoc()){
//不管你想对数据做什么
}

或者其他类似“%$text%”的列怎么样?我不明白你的问题…或者…
位置REGEXP“text1 | text2 | text3”
或者
位置在('text1'、'text2'、'text3')
我从用户表单中获取文本数据。我必须从数据库中选择位置为文本、性别为text1的数据,等等…@glowy.penguin我需要在所有这些字段中搜索不相同的文本…我必须将文本与位置、text1与性别等匹配…从数据库中筛选数据…这些文本、text1是我获取的项目rom用户搜索表单…@seliteI需要在所有这些字段中搜索不同的文本…我必须将文本与位置、文本1与性别等匹配…从数据库中筛选数据…这些文本、文本1是我从用户搜索表单中获得的项…。为此,我使用了我发布的代码,但似乎有错误@nikhilanya代码确实存在和您要求的完全相同,它将文本与位置相匹配,将text1与宗教相匹配。仅当用户指定一些详细信息时,才会生成“WHERE”子句子句确保只返回满足所有类别的结果。但是,如果您的需求是其他的,请尝试详细描述它,那么有必要指出,除了支持全文搜索外,myisam表也不太持久,并且不完全是事务性的……如果您习惯innodb,规则会改变e、 许多人使用单独的搜索服务,例如弹性搜索,与MySQL全文搜索相比,弹性搜索通常具有更好的性能和功能。