首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对sqlite中的文本匹配进行计数

对sqlite中的文本匹配进行计数
EN

Stack Overflow用户
提问于 2012-03-05 17:34:02
回答 1查看 226关注 0票数 1

我在表中的几列中查询一些单词(实质上是查询m个文本列,看它们是否包含用户输入的n个术语),我希望根据出现的匹配数对这些行进行排名。所以我有一个类似于下面的查询:

代码语言:javascript
复制
SELECT *, (COLUMN1 LIKE '%TERM1%') + (COLUMN1 LIKE '%TERM2%') + ... + (COLUMN1 LIKE '%TERMN%') + (COLUMN2 LIKE '%TERM1%') + ... + (COLUMNM LIKE '%TERMN%') AS SCORE 
FROM TABLE_NAME 
WHERE COLUMN1 LIKE '%TERM1%' OR ... OR COLUMNM LIKE '%TERMN%' 
ORDER BY SCORE DESC LIMIT 200;

但是这个查询似乎并不总是有效的,有时所有的结果似乎都是0分,即使有匹配。有没有人能建议一下问题出在哪里?我怀疑这可能与LIKE运算符的结果类型和得分列的类型有关。

此外,有没有更好的方法来做同样的事情而不生成这个冗长的查询?

EN

回答 1

Stack Overflow用户

发布于 2012-03-05 17:54:51

是的,还有另一种使用代码的方法

尝尝这个

代码语言:javascript
复制
long cnt = countdata("COLUMN1 LIKE %TERM1%")

代码语言:javascript
复制
public Long countdata(String whereClause) {
        long count = 0;
        Cursor c = mDb.rawQuery("SELECT count(*) FROM TABLENAME WHERE " + whereClause, null);
        int numRows = c.getCount();
        c.moveToFirst();
        for (int i = 0; i < numRows; ++i) {
            Log.i("Count", c.getString(0));
            count = c.getLong(0);
            c.moveToNext();
        }
        c.close();
        return Long.valueOf(count);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9564370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档