我正在尝试按照每行中适用的满足条件数来订购结果集。
如果我有下表
++++++++++++++++++++++++++++++++++++++
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中完成吗?如果有,怎么样?
答案 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,因为它有三个字母;设置最小字长参数会修复此问题。)