SQL返回每行

时间:2015-12-28 14:33:43

标签: mysql sql

我正在尝试按照每行中适用的满足条件数来订购结果集。

如果我有下表

++++++++++++++++++++++++++++++++++++++
book_id | book_title
++++++++++++++++++++++++++++++++++++++
|  54   | Learn SQL the easy way
|  56   | Mastering PHP
|  58   | PHP, MySQL Bible
|  59   | The complete guide to SQL
|  62   | learn MySQL in 24 hours
|  64   | How to build websites
|  69   | SQL stored procedures guide
++++++++++++++++++++++++++++++++++++++

现在我要运行此查询:

SELECT book_id 
from books 
where book_title ilike '%sql%' 
    OR book_title ilike '%guide%' 
    OR book_title ilike '%complete%'

我想得到以下结果:

++++++++++++++++++++++++++++++++++++++
book_id | met_conditions
++++++++++++++++++++++++++++++++++++++
|  59   | 3
|  69   | 2
|  62   | 1
|  58   | 1
|  54   | 1

其中met_conditions是每条记录中满足的适用条件总数。

我可以在SQL中完成吗?如果有,怎么样?

1 个答案:

答案 0 :(得分:2)

您可以在MySQL中一起添加条件:

select book_id,
       ((book_title ilike '%sql%') +
        (book_title ilike '%guide%') +
        (book_title ilike '%complete%')
       ) as metConditions
from books
where book_title ilike '%sql%' OR book_title ilike '%guide%' OR book_title ilike '%complete%';

这是有效的,因为MySQL将布尔表达式视为数字上下文中的整数,0表示false,1表示true。另一种方法是使用case表达式,这种表达式适用于任何(合理的)数据库。

使用全文索引可能会更好地进行此类查询。然后,相关性将是您想要的指标。 (注意:默认情况下,全文索引会忽略SQL,因为它有三个字母;设置最小字长参数会修复此问题。)