SQL SELECT Query用于搜索

时间:2016-07-26 06:24:51

标签: php mysql logic

我有三个变量:

$school
$class
$subject

搜索字符串$searchquery

我想在我的数据库中搜索与搜索查询匹配的行...目前我使用的是:

$searchquery = str_replace(" ","|",$searchquery);
$sql = "
    SELECT * FROM filedetails 
    WHERE school RLIKE '$searchquery' 
        OR class RLIKE '$searchquery' 
        OR subject RLIKE '$searchquery'";

现在,这是如何工作的,假设我输入Mathematics Class X。它将字符串转换为Mathematics|Class|X,这很好并搜索数据库并打印结果...... 但是有一个错误:

它正在打印所有包含数学或类或X的行,因此我的输出包括所有数学学院的所有类和所有X类学校的所有科目...

我想让它向我展示所有有数学和X级的学校......

P.S。 - 我尝试使用AND代替OR,但现在我得到空结果,因为没有学校匹配我的查询字符串......

1 个答案:

答案 0 :(得分:0)

一种方法是首先对所有数据搜索进行不同的二维数组,然后进行交集,这样就会得到匹配所有关键字的公共行......

$sql = "SELECT * FROM filedetails";
      $query = mysql_query($sql);
      $array1 = array();
      while ($row = mysql_fetch_array($query))
      {
           $array1[] = $row;
      }
      $sql = "SELECT * FROM filedetails WHERE school RLIKE '$searchquery'";
      $query = mysql_query($sql);
      $array2 = array();
      while ($row = mysql_fetch_array($query))
      {
           $array2[] = $row;
      }
      $sql = "SELECT * FROM filedetails WHERE subject RLIKE '$searchquery'";
      $query = mysql_query($sql);
      $array3 = array();
      while ($row = mysql_fetch_array($query))
      {
           $array3[] = $row;
      }
      $sql = "SELECT * FROM filedetails WHERE class RLIKE '$searchquery'";
      $query = mysql_query($sql);
      $array4 = array();
      while ($row = mysql_fetch_array($query))
      {
           $array4[] = $row;
      }

现在,这段代码正在做什么,它为每个字段单独搜索并为每个字段的每个查询生成单独的结果,现在我们将采用数组的交集以获得具有关键字的公共行

但是有一个问题,假设$searchquery包含有关School和Class的详细信息,但没有关于Subject的信息,那么$array3将为null,因为查询将导致NULL,那么我们需要考虑处理已在Another Question Here ...

中解决的空数组

希望这有助于......:)