多项搜索引擎查询

时间:2012-11-24 22:51:28

标签: php mysql sql

我有这个代码,希望将我输入的数据转换为数组,然后应该在数据库中搜索数组。该数据库包含由爬行器在网站中扫描的单词行。

数组代码似乎不起作用:(  我的查询如下:

        if( isset($_POST['keyword']) ){
        $k = $_POST['keyword'];
        }else{
        $k = '';
        }
        $k = ( isset($_POST['keyword']) )? trim($_POST['keyword']) : '';
        $terms = (strlen($k) > 0)? explode(' ', $k) : Array();

          $keyword = addslashes( $k);
          $results = addslashes( $_POST['results'] );

          /* Execute the query that performs the actual search in the DB: */
             $result = mysql_query(" SELECT p.page_url AS url,
                       COUNT(*) AS occurrences 
                       FROM page p, word w, occurrence o
                       WHERE p.page_id = o.page_id AND
                       w.word_id = o.word_id AND
                       w.word_word = \"$keyword\"
                       GROUP BY p.page_id
                       ORDER BY occurrences DESC
                       LIMIT $results" ); 

1 个答案:

答案 0 :(得分:1)

您的问题标题为“多项搜索引擎”,但此代码(SQL部分意味着经过深思熟虑的索引)无法容纳多个术语。事实上,PHP代码是乱码。它首先使用if表达式设置$ k的值。然后使用三元运算符将其设置为相同的值。

您尚未提供您正在使用的搜索字词的示例,也没有提供从中生成的查询。你也没有提供“似乎没有工作”的任何解释。

我建议你去写一个编写爬虫和搜索数据库的人 - 他们会解释说如果你有多个术语,那么你需要以非常不同的方式将文字值拼接到查询中或加载它们(暂时)进入表并与搜索查询连接。他们还应该用一条大鱼打你,并告诉你去学习SQL注入。

e.g。

...
$qry=searchQuery($_POST['keywords'], $dbh);
if ($qry) {
    $limit = (integer) $_POST['results'] ? (integer) $_POST['results'] : 20;
    $qry.=" LIMIT $limit";
    result=mysql_query($qry, $dbh);
} else {
    ...
    exit;
}
...

function searchQuery($keywords $dbh)
{
   if (''==$keywords) return false;
   $keywords=str_replace('  ', ' ', $keywords); // remove consecutive spaces
   $keywords=str_replace('  ', ' ', $keywords); // cos you might have an odd number of consecutive spaces
   $parts=explode(' ', $keywords);
   foreach ($parts as $x=>$word) {
       $parts[$x]="'" . mysql_real_escape_string($word, $dbh) . "'";
   }
   $keywords=implode(',', $parts);
   return " SELECT p.page_url AS url,
                   COUNT(*) AS occurrences 
                   FROM page p, word w, occurrence o
                   WHERE p.page_id = o.page_id AND
                   w.word_id = o.word_id AND
                   w.word_word in ($keywords)
                   GROUP BY p.page_id
                   ORDER BY COUNT(DISTINCT w.word_id)*COUNT(*) DESC";

}