我正在查询表中的几个列中的某些单词(基本上查询m个文本列是否包含用户输入的n个术语),我想根据发生的匹配数对这些行进行排名。 所以我有类似这样的查询:
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运算符的结果类型和得分列的类型有关。
此外,是否有更好的方法可以在不生成详细查询的情况下执行相同的操作?
答案 0 :(得分:0)
是的,使用代码的另一种方式是 试试这个
long cnt = countdata("COLUMN1 LIKE %TERM1%")
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);
}