我有一個包含元記錄的表。我需要記錄中的最佳搜索結果。獲取MYSQL最佳搜索結果
Suppos如果我在表中搜索與以下關鍵詞:
Beautiful well-maintained Remodeled
然後我的結果應該是這樣的類型:
首先所有記錄包含所有三個關鍵詞, 二記錄包含任何兩個記錄 和最後記錄包含任何一個關鍵字。
我嘗試過全文搜索和Like查詢,但沒有得到結果。
我有一個包含元記錄的表。我需要記錄中的最佳搜索結果。獲取MYSQL最佳搜索結果
Suppos如果我在表中搜索與以下關鍵詞:
Beautiful well-maintained Remodeled
然後我的結果應該是這樣的類型:
首先所有記錄包含所有三個關鍵詞, 二記錄包含任何兩個記錄 和最後記錄包含任何一個關鍵字。
我嘗試過全文搜索和Like查詢,但沒有得到結果。
這個計數每記錄匹配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;
我會用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);
}
我知道這個代碼單獨不會工作,但它應該指向你在正確的方向。
使用像
有三:
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(.*)'
你能告訴我們您的查詢? – 2014-10-09 13:31:28
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