2014-10-09 103 views
-2

我有一個包含元記錄的表。我需要記錄中的最佳搜索結果。獲取MYSQL最佳搜索結果

Suppos如果我在表中搜索與以下關鍵詞:

Beautiful well-maintained Remodeled 

然後我的結果應該是這樣的類型:

首先所有記錄包含所有三個關鍵詞, 二記錄包含任何兩個記錄 和最後記錄包含任何一個關鍵字。

我嘗試過全文搜索和Like查詢,但沒有得到結果。

+1

你能告訴我們您的查詢? – 2014-10-09 13:31:28

+0

http://stackoverflow.com/questions/26279574/if-search-string-full-match-then-record-should-come-first-otherwise-it-should-be – JNevill 2014-10-09 13:34:34

回答

3

這個計數每記錄匹配OND順序:

select * 
from 
(
    select 
    mytable.*, 
    case when lower(col) like '%beautiful%' then 1 else 0 end + 
    case when lower(col) like '%well-maintained%' then 1 else 0 end + 
    case when lower(col) like '%remodeled%' then 1 else 0 end as matches 
    from mytable 
) 
where matches > 0 
order by matches desc; 
0

我會用PHP explode獲得分隔每個單詞,並使用喜歡調整自己的SQL查詢相應使用AND和OR語句:

$keywords = explode(" ", $_REQUEST['q']); 
$sql_query = $dbh->prepare("QUERY"); 
$i = 0; 
foreach($keywords as $keyword) { 
    $sql_query->bindParam($i, $keyword); 
} 

我知道這個代碼單獨不會工作,但它應該指向你在正確的方向。

0

使用像

有三:

SELECT * FROM <table> 
WHERE <column> LIKE '%Beautiful%' 
AND <column> LIKE '%well-maintained%' 
AND <column> LIKE '%Remodeled%' 

任意兩個:

SELECT * FROM <table> 
WHERE (<column> LIKE '%Beautiful%' AND <column> LIKE '%well-maintained%') 
OR (<column> LIKE '%Remodeled%' AND <column> LIKE '%well-maintained%') 
OR (<column> LIKE '%Beautiful%' AND <column> LIKE '%Remodeled%') 

任何一個:

SELECT * FROM <table> 
WHERE <column> LIKE '%Beautiful%' 
OR <column> LIKE '%Remodeled%' 
OR <column> LIKE '%Beautiful%' 

使用正則表達式任何比賽:

SELECT * FROM <table> WHERE <column> REGEXP '(.*)Remodeled(.*)|(.*)well-maintained(.*)|(.*)Beautiful(.*)'