2011-05-28 61 views
1

我做了一个mysql/php搜索引擎,其中我添加了带有关键字google搜索引擎的谷歌网址和另外一个带有关键字yahoo搜索引擎的雅虎网址。如果我在搜索框上输入谷歌搜索引擎,我该如何让谷歌网址首先出现?如何使精确关键字搜索首先出现?

这是代码:

//connect to database 
    mysql_connect("","",""); 
    mysql_select_db(""); 

    //explode out search term 
    $search_exploded = explode(" ",$search); 

    foreach($search_exploded as $search_each) 
    { 

     //construct query 
    $x++; 
    if ($x==1) 
    $construct .= "Keywords LIKE '%$search_each%'"; 
    else 
    $construct .= " OR Keywords LIKE '%$search_each%'"; 

    } 

    //echo outconstruct 
    $constructx = "SELECT * FROM searchengine WHERE $construct"; 

    $construct = "SELECT * FROM searchengine WHERE $construct LIMIT $s,$e"; 
    $run = mysql_query($constructx); 

    $foundnum = mysql_num_rows($run); 


    $run_two = mysql_query("$construct"); 

    if ($foundnum==0) 
    echo "No results found for <b>$search</b>"; 
    else 
+2

我希望没有人想要搜索任何带有撇号的东西。 – icktoofay 2011-05-28 21:13:35

+1

小鲍比桌子? :D – Halcyon 2011-05-28 21:14:16

回答

0
  1. 要查找条目数,您可以使用SELECT count(*)而不是mysql_num_rows进行完整查询。
  2. 要对结果进行排序,您需要在查询中使用“ORDER BY”,以及一些字段,这将成为排序的标准。你的情况,你可以写
    $construct = "SELECT * FROM searchengine WHERE $construct ORDER BY Keywords LIMIT $s,$e ";

而且不要忘了净化你的$搜索。
$search = mysql_real_escape_string($search);

+0

您发布的代码带给我一个php错误:( – mofhd 2011-05-28 21:32:43

+0

@Rekos,对不起,编辑 – 2011-05-28 21:38:06

+0

如果我用($构造=“选择*从searchengine WHERE $构造极限$ s,$ e ORDER BY关键字”替换原始代码“ ;)我得到一个(解析错误:语法错误,意想不到的T_VARIABLE在52行/home/a5083847/public_html/search.php)PHP错误 – mofhd 2011-05-28 21:39:16

2

这里最好的办法是不使用LIKE,但使用MySQL的FULLTEXT索引。为此,您需要在要搜索的列上创建一个FULLTEXT索引。

ALTER TABLE searchengine ADD FULLTEXT(keywords);

要查询,做这样的事情:

SELECT * FROM searchengine WHERE MATCH (keywords) AGAINST ("$searchterm");

您可以结合不同的MATCH AGAINST查询来满足所有的关键字。此外,您可以将MATCH AGAINST位置于查询的SELECT子句中。这将返回一个分数,然后您可以使用它来对结果进行排名。

此外,您甚至可以在运行查询之前执行一些干扰工作。使用由各种MATCH运算符生成的分数,您可以对整个单词进行排序,使其高于词干单词。

+0

SELECT * FROM searchengine WHERE MATCH(keywords)AGAINST(“$ searchterm”); 此代码无效。 – mofhd 2011-05-29 05:58:10

+0

错误是什么?你是否首先添加了FULLTEXT索引? – 2011-06-30 22:06:30