2014-01-16 199 views
0

即时尝试编码搜索引擎。
除此之外,如果我输入一个查询如西海岸,我也得到东海岸的结果。发生这种情况是因为东部和西部的关键字包含海岸作为单个词。PHP搜索引擎错误

但是我想用这行代码到单独的两个:

<?php 
$k = $_GET['k']; 
$terms = explode(" ", $k); 
$query = "SELECT * FROM Search WHERE "; 
foreach ($terms as $each){ 
    $i++; 

    if($i == 1) 
     $query .= "keywords LIKE '%$each%' "; 
    else 
     $query .= "OR keywords LIKE '%$each%' "; 

} 

如果我回应了这一点用在搜索表单中的关键字都走散了,但进一步对他们不
如何我能解决这个问题吗?

<?php 
$k = $_GET['k']; 
$terms = explode(" ", $k); 
$query = "SELECT * FROM Search WHERE "; 
foreach ($terms as $each){ 
    $i++; 

    if($i == 1) 
     $query .= "keywords LIKE '%$each%' "; 
    else 
     $query .= "OR keywords LIKE '%$each%' "; 

} 
if($k == "" || $k == " ") 
{ 
    echo "<p> Please enter a valid search term."; //If search is empty or contains only a space. 
    exit; 
} 
//connect to database 
mysql_connect("LOCALHOST" ,"ROOT" ,"PASSWORD"); 
mysql_select_db("DATABASE"); 
$query = mysql_query($query); 
$numrows = mysql_num_rows($query); 
if($numrows > 0){ 
    while($row = mysql_fetch_assoc($query)) 
    { 
     $id = $row['id']; 
     $title = $row['title']; 
     $description = $row['description']; 
     $keywords = $row['keywords']; 
     $link = $row['link']; 
     echo "<h2><a href ='$link' class='searchcolor' color='#a8a8a8'> $title</a></h2> 
      $description<br /> 
      This page contains information about \"<b>$query</b>\"<br /><hr>"; 
    } 

} 
else 
    echo "No results for \"<b>$k</b>\""; 

//disconnect 
mysql_close(); 


?> 
+0

使用MATCH(),而不是像这样MATCH(“东海岸”),它返回一个加权的搜索结果,因此您可以按相关性排序,即:东海岸拥有高于相关性因此您可以确保东海岸出现在顶部和西岸,出现在第200页上。注意,这仅适用于全文索引和myiasm表格。你可以用innodb表来做,但你必须在代码中做而不是查询。 – Dave

回答

0

您的疑问:

SELECT * FROM Search WHERE keywords LIKE '%west%' OR keywords LIKE '%$coast%'; 

将返回匹配,因为OR的这些关键字的要么其结果。如果您希望结果匹配所有关键字,请使用AND

I.e.改变

$query .= "OR keywords LIKE '%$each%' "; 

$query .= "AND keywords LIKE '%$each%' "; 
+0

这真的帮助我了! 谢谢! – brian

+0

@brian没问题。乐意效劳。 – Jim