基于哪个列匹配字符串的评级

时间:2009-10-01 17:19:26

标签: sql mysql

我正在尝试编写一个查询来评估特定对象与某些搜索条件的匹配程度。

我有一个包含列的表:objectid,typeid和name。对象可以有两个与之关联的名称(当前名称或以前的名称)。 typeid标识行的名称类型。

用户可以从表单中搜索数据库。表单提交两个字符串。我想搜索数据库和匹配string1的行,并且“当前名称”类型的评级为1。 匹配string2并且是“以前的名称”类型的行也被赋予等级1。 匹配string1但是“以前的名称”类型的行仍然被选中,但评级为0。 匹配string2但是“当前名称”类型的行仍然被选中,但评级为0.

目前我正在搜索string1和string2,其中类型为“previous name”或“current name”,并按objectid对结果进行分组,评级基于每个组的计数。但这不够灵活,根据找到字符串的列而给出不同的评级。

我还有其他会影响评分的标准。我只是在尝试初始填充临时表时遇到了麻烦。

1 个答案:

答案 0 :(得分:1)

如果您正在寻找一些总计数,请告诉我,但这就是我解释您的问题的方法:

select *,
    case
        when MyColumn = 'string1' and MyType = 'current name' then 1
        when MyColumn = 'string2' and MyType = 'previous name' then 1
        when MyColumn = 'string1' and MyType = 'previous name' then 0
        when MyColumn = 'string2' and MyType = 'current name' then 0
        else 2 -- in case type is neither previous nor current
    end as Rating
from MyTable
where MyColumn = 'string1'
    or MyColumn = 'string2'

或者像这样,如果你只想要匹配两种类型之一的记录:

select *,
    case
        when MyColumn = 'string1' and MyType = 'current name' then 1
        when MyColumn = 'string2' and MyType = 'previous name' then 1
        when MyColumn = 'string1' and MyType = 'previous name' then 0
        when MyColumn = 'string2' and MyType = 'current name' then 0
    end as Rating
from MyTable
where (MyColumn = 'string1' or MyColumn = 'string2')
    and (MyType = 'current name' or MyType = 'previous name')