mysql - 多个列的多个CASE语句,具有相关值(匹配排名)的任何值

时间:2015-08-23 10:57:02

标签: php mysql codeigniter search

这是在具有多个关键字的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点?

0 个答案:

没有答案