我有一个包含元记录的表。我需要记录中最好的搜索结果。
Suppos如果我在表格中搜索以下关键字:
Beautiful well-maintained Remodeled
然后我的结果应该是这种类型:
首先,所有记录都包含所有三个关键字, 第二条记录包含任何两条记录 最后一条记录包含任何一个关键字。
我尝试过全文搜索和Like查询,但我没有得到结果。
答案 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(.*)'