2

我正在尝试编写一个使用多个关键字进行搜索的选择语句。例如

SELECT id FROM my_mod mm WHERE (mm.name LIKE '%joe%' OR mm.name LIKE '%jim%');

我想做的是在返回数据中有一个额外的列,该列计算该行与类似语句之一匹配的次数。

因此,对于上面的那个,如果有一个名字jimjoe,它的计数是 2,或者如果名字是jim它,它的计数是 1。有谁知道这样做的方法?

我还应该提到我不能使用临时表。

4

3 回答 3

2
SELECT id, 
       CASE 
         WHEN mm.name LIKE '%joe%' 
              AND mm.name LIKE '%jim%' THEN 2 
         ELSE 1 
       end AS cnt 
FROM   my_mod mm 
WHERE  mm.name LIKE '%joe%' 
        OR mm.name LIKE '%jim%' 
于 2012-05-23T10:48:19.370 回答
1

试试这个查询 -

SELECT
  COUNT(IF(name LIKE '%joe%', 1, NULL)) joe_count,
  COUNT(IF(name LIKE '%jim%', 1, NULL)) jim_count
FROM
  my_mod
WHERE
  name LIKE '%joe%' OR name LIKE '%jim%'
于 2012-05-23T10:56:52.573 回答
0

试试这个

select t.id,count(*) FROM
((select id from my_mod where name like '%jim%')
union all
(select id from my_mod where name like '%joe%')) t group by t.

我在这里检查它是如何工作的

于 2012-05-23T11:03:00.440 回答