我在表中的几列中查询一些单词(实质上是查询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运算符的结果类型和得分列的类型有关。
此外,有没有更好的方法来做同样的事情而不生成这个冗长的查询?
发布于 2012-03-05 17:54:51
是的,还有另一种使用代码的方法
尝尝这个
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);
}https://stackoverflow.com/questions/9564370
复制相似问题