获得MYSQL最佳搜索结果

时间:2014-10-09 13:26:27

标签: php mysql sql

我有一个包含元记录的表。我需要记录中最好的搜索结果。

Suppos如果我在表格中搜索以下关键字:

Beautiful well-maintained Remodeled

然后我的结果应该是这种类型:

首先,所有记录都包含所有三个关键字, 第二条记录包含任何两条记录 最后一条记录包含任何一个关键字。

我尝试过全文搜索和Like查询,但我没有得到结果。

3 个答案:

答案 0 :(得分:3)

按每个记录和顺序计算匹配数:

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;

答案 1 :(得分:0)

我会使用PHP explode将每个单词分开并使用AND和OR语句相应地调整我的SQL查询:

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

我知道这个代码不会起作用,但它应该指向正确的方向。

答案 2 :(得分:0)

使用LIKE

有3:

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%'

使用Regex进行任何匹配:

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