这是在具有多个关键字的MySQL表中的多列内搜索。
$query="select *
,case when prod_name like '%$search%' then 1 else 0 end as name_rank
, case when prod_code like '%$search%' then 1 else 0 end as code_rank
, case when prod_brand like '%$search%' then 1 else 0 end as brand_rank
from products
where prod_name like '%$search%'
or prod_code like '%$search%'
or prod_brand like '%$search%'
order by (name_rank + code_rank + brand_rank ) desc";
如果搜索关键字(即:prod 123
)在搜索表单中作为输入提供,则着陆网址将变为:http://localhost/shop/index/search?search=prod+123
。
我通过以下方式获取查询参数:
$search=$_GET['search'];
然后,上面的查询返回任何单个列包含两个关键字的行。例如,如果列prod_name
包含fine prod
而列prod_brand
包含'123',则查询不会返回此行。
1)显然我也需要返回那一行
同样,当搜索关键字是单个词时,即:prod
,第1行在product new
列中有prod_name
,第2行在同一列中只有prod
,然后第2行应该在结果的第1行之前。不应该吗?我认为与查询不同,它需要检测0和1之间的任何相关性
2)如何使结果反映出这种相关性或优先级?
顺便说一句,我正在使用PHP(即CodeIgniter框架)。
如何实现第1点和第2点?