2012-11-21 53 views
4

我试图让我的全文搜索按相关性排序。这里是我的代码,它的工作原理是如果删除ORDER BY,但不按相关性排序。我已经尝试过,它实际上使它不会找到任何结果......任何想法?MYSQL全文搜索顺序的相关性

$query_for_result=mysql_query(" 
    SELECT * FROM Assets WHERE MATCH 
    (`Badge`,`First Name`,`Last Name`,`Service Tag`,`Asset Tag`) 
    AGAINST ('".$query."*' IN BOOLEAN MODE) and 
    `deleted` = '0' ORDER BY relevance DESC"); 

编辑*

<input type="text" name="query" /> 
<input type="hidden" value="Search" name="submit" /> 
<input type="submit" name="submit" value="Search" /> 

</form> 
<h4>Search by: Badge, First or Last Name, Service Tag, Asset Tag, Printer Queue or Printer IP.</h4> 
<br> 
</center> 

<?php 


if(isset($_GET['submit'])){ 


$db_tb_name=Assets; 
$db_tb_atr_name=`First Name`; 

$query=mysql_real_escape_string($_GET['query']); 

$query_for_result=mysql_query(" 
SELECT * FROM Assets WHERE MATCH 
(`Badge`,`First Name`,`Last Name`,`Service Tag`,`Asset Tag`) 
AGAINST ('".$query."*' IN BOOLEAN MODE) and 
`deleted` = '0' ORDER BY relevance DESC"); 

后来在代码

while($data_fetch=mysql_fetch_array($query_for_result)) 
{ 

print '<h3>'; 
print "<a href=\"modify.php?id=" . $data_fetch['id'] . "\">" . $data_fetch['First Name'] . ' ' . $data_fetch['Last Name'] . "</a>"; 
print '<br/><b>Badge:</b> '. $data_fetch['Badge']; 
print '<br/> <b>Service Tag:</b> '. $data_fetch['Service Tag']; 
print ' <b>Asset Tag:</b> '. $data_fetch['Asset Tag']; 
print '<br/> <b>Status:</b> '. $data_fetch['Status']; 
print '<br/><b>Employee Status: </b>'; 
    if($data_fetch['Employee Status'] == 'Active'){ 
print '<font color="#32CD32">' . $data_fetch['Employee Status'] . '</font>'; 
    } 
elseif($data_fetch['Employee Status'] == 'Terminated'){ 
print '<font color="red">' . $data_fetch['Employee Status'] . '</font>';} 
print '<br/> <b>Last Modified:</b> '. $data_fetch['Last Modified']; 
print "<span> </span>"; 
print '</h3>'; 
print '<br/><p>' ; 

} 

UPDATE 这为我工作 我终于得到它通过使用

工作

感谢您的帮助

回答

5

MySQL Boolean Full-Text Searches documentation

他们不会自动排在降低相关性进行排序。您可以从前面的查询结果中看到这一点:具有最高相关性的行是包含“MySQL”两次的行,但最后列出的不是第一行。

这就解释了为什么它不按照相关性排序,没有ORDER BY。现在能够通过relevance订购,您需要定义它:

SELECT *, MATCH (`Badge`,`First Name`,`Last Name`,`Service Tag`,`Asset Tag`) as relevance 
WHERE MATCH AGAINST ('".$query."*' IN BOOLEAN MODE) and `deleted` = '0' 
ORDER BY relevance DESC 
+0

感谢,但由于某种原因,这仍然会导致没有行发现 – user1548769

+0

@ user1548769您可以共享不返回结果的查询? – Tchoupi

+0

我编辑并添加了一些额外的代码 – user1548769