Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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 简单SQL搜索调整_Php_Mysql_Search - Fatal编程技术网

Php 简单SQL搜索调整

Php 简单SQL搜索调整,php,mysql,search,Php,Mysql,Search,我正在玩PHPFreaks的“简单SQL搜索”脚本。我想知道在提交查询后如何改进搜索方法 假设我提交了一个类似“音乐”的搜索词,搜索查询将给出数据库中包含“音乐”一词的所有数据的结果,但假设我想搜索“音乐”一词,一旦结果显示出来,我想优化搜索并查找“摇滚”或“音乐”类别下的所有结果“rap”。我想使用一个选定选项列表来完成此操作 这是PHPFreaks的工作脚本,我将其包括在内,因此,如果需要,这里的用户也可以使用此脚本: $error = array(); $results = array()

我正在玩PHPFreaks的“简单SQL搜索”脚本。我想知道在提交查询后如何改进搜索方法

假设我提交了一个类似“音乐”的搜索词,搜索查询将给出数据库中包含“音乐”一词的所有数据的结果,但假设我想搜索“音乐”一词,一旦结果显示出来,我想优化搜索并查找“摇滚”或“音乐”类别下的所有结果“rap”。我想使用一个选定选项列表来完成此操作

这是PHPFreaks的工作脚本,我将其包括在内,因此,如果需要,这里的用户也可以使用此脚本:

$error = array();
$results = array();


if (isset($_GET['search'])) {
   $searchTerms = trim($_GET['search']);
   $searchTerms = strip_tags($searchTerms); // remove any html/javascript.

   if (strlen($searchTerms) < 3) {
      $error[] = "Search terms must be longer than 3 characters.";
   }else {
      $searchTermDB = mysql_real_escape_string($searchTerms); // prevent sql injection.
   }

   // If there are no errors, lets get the search going.
   if (count($error) < 1) {
      $searchSQL = "SELECT sid, sbody, stitle, sdescription FROM simple_search WHERE ";

      // grab the search types.
      $types = array();
      $types[] = isset($_GET['body'])?"`sbody` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['title'])?"`stitle` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['desc'])?"`sdescription` LIKE '%{$searchTermDB}%'":'';

      $types = array_filter($types, "removeEmpty"); // removes any item that was empty (not checked)

      if (count($types) < 1)
         $types[] = "`sbody` LIKE '%{$searchTermDB}%'"; // use the body as a default search if none are checked

          $andOr = isset($_GET['matchall'])?'AND':'OR';
      $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `stitle`"; // order by title.

      $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}");

      if (mysql_num_rows($searchResult) < 1) {
         $error[] = "The search term provided {$searchTerms} yielded no results.";
      }else {
         $results = array(); // the result array
         $i = 1;
         while ($row = mysql_fetch_assoc($searchResult)) {
            $results[] = "{$i}: {$row['stitle']}<br />{$row['sdescription']}<br />{$row['sbody']}<br /><br />";
            $i++;
         }
      }
   }
}

function removeEmpty($var) {
   return (!empty($var)); 
}
?>
$error=array();
$results=array();
如果(isset($\u GET['search'])){
$searchTerms=trim($_GET['search']);
$searchTerms=strip_标记($searchTerms);//删除任何html/javascript。
if(strlen($searchTerms)<3){
$error[]=“搜索词的长度必须超过3个字符。”;
}否则{
$searchTermDB=mysql\u real\u escape\u string($searchTerms);//防止sql注入。
}
//如果没有错误,让我们开始搜索。
如果(计数($error)<1){
$searchSQL=“从简单搜索中选择sid、sbody、stitle、sdesdescription”;
//抓取搜索类型。
$types=array();
$types[]=isset($_GET['body'])?“`sbody`类似于“%$searchTermDB}%”:”;
$types[]=isset($_GET['title'])?“`stitle`类似“{$searchTermDB}%”:”;
$types[]=isset($_GET['desc'])?“`sdescription`类似“%$searchTermDB}%”:”;
$types=array_filter($types,“removempty”);//删除任何为空(未选中)的项
if(计数($类型)<1)
$types[]=“`sbody`LIKE'%{$searchTermDB}%”;//如果未选中任何内容,则将该正文用作默认搜索
$andOr=isset($_GET['matchall'])?'和':'或';
$searchSQL.=内爆(“{$andOr}”,$types)。“按`针'排序”;//按标题排序。
$searchResult=mysql_query($searchSQL)或trigger_error(“有错误。
.”。mysql_error()。“
SQL是:{$searchSQL}”); if(mysql_num_rows($searchResult)<1){ $error[]=“提供的搜索词{$searchTerms}未产生任何结果。”; }否则{ $results=array();//结果数组 $i=1; while($row=mysql\u fetch\u assoc($searchResult)){ $results[]=“{$i}:{$row['stitle']}
{$row['sdesdescription']}
{$row['sbody']}
”; $i++; } } } } 函数removempty($var){ 返回(!空($var)); } ?>
结果是:

 <?php echo (count($error) > 0)?"The following had errors:<br /><span id=\"error\">" . implode("<br />", $error) . "</span><br /><br />":""; ?>
      <form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>" name="searchForm">
         Search For: <input type="text" name="search" value="<?php echo isset($searchTerms)?htmlspecialchars($searchTerms):''; ?>" /><br />
         Search In:<br />
         Body: <input type="checkbox" name="body" value="on" <?php echo isset($_GET['body'])?"checked":''; ?> /> | 
         Title: <input type="checkbox" name="title" value="on" <?php echo isset($_GET['title'])?"checked":''; ?> /> | 
         Description: <input type="checkbox" name="desc" value="on" <?php echo isset($_GET['desc'])?"checked":''; ?> /><br />
                 Match All Selected Fields? <input type="checkbox" name="matchall" value="on" <?php echo isset($_GET['matchall'])?"checked":''; ?><br /><br />
         <input type="submit" name="submit" value="Search!" />
      </form>
      <?php echo (count($results) > 0)?"Your search term: {$searchTerms} returned:<br /><br />" . implode("", $results):""; ?>


有两个选项可以优化搜索结果

  • 将搜索(结果行集)保存/序列化到磁盘/会话,以便在用户向搜索参数添加任何内容的情况下进行搜索。在此szenario中,您需要确保用户没有更改“基本”搜索参数。如果他更改了,您可以先运行另一个基本搜索,然后再提取优化结果(特定于类型的条目)结果出来了

  • 将新的搜索参数添加到一些基本查询字符串中,并让数据库进行优化搜索

  • 在这两种情况下,您最终都会得到一个经过优化的结果。我会选择第二个选项,在该选项中,您不需要关心以前的搜索参数。您只需将“流派”添加到查询中,就可以了