我想要实现的目标:Android中的自定义搜索,可以查看多个列以向用户提供建议。
我可以将单个“主题”列映射到系统指定的SUGGEST_COLUMN_TEXT_1
,这非常有效,我甚至可以将主题分组以删除重复的条目。
但是,我想要的是将“作者名字||''||作者姓氏”(将这两个作为单行条目连接)和“作者组名称”包含在该单个SUGGEST_COLUMN_TEXT_1中(然后弄清楚如何按任何重复进行分组?)
我考虑过使用HashMap,但是查询构建器会调用一个String,所以我不确定这是否可行。
这可能吗?不,我确定是的。有任何想法吗?也许是联盟?我已经注释掉了下面的一些似乎不起作用的代码。
private static final HashMap<String, String> SEARCH_PROJECTION_MAP;
static {
SEARCH_PROJECTION_MAP = new HashMap<String, String>();
SEARCH_PROJECTION_MAP.put("_id", "_id");
SEARCH_PROJECTION_MAP.put(SearchManager.SUGGEST_COLUMN_TEXT_1,
ExternalDbContract.QuoteEntry.TOPIC
// + " OR \"" + ExternalDbContract.QuoteEntry.AUTHOR_FIRST_NAME
// + "\" || \' \' || \"" + ExternalDbContract.QuoteEntry.AUTHOR_LAST_NAME
// + "\" OR \"" + ExternalDbContract.QuoteEntry.AUTHOR_GROUP_NAME
+ "\" AS "
+ SearchManager.SUGGEST_COLUMN_TEXT_1);
}
就原始SQL而言,我认为这正是我想要实现的目标:
"SELECT Topic FROM quotes WHERE Topic LIKE " + selectionArgs[0] +
"UNION SELECT \"Author First Name\" || ' ' || \"Author Last Name\" FROM quotes WHERE \"Author First Name\" LIKE " + selectionArgs[0] + " OR " + "\"Author Last Name\" LIKE " + selectionArgs[0] +
"UNION SELECT \"Author Group Name\" FROM quotes WHERE \"Author Group Name\" LIKE " + selectionArgs[0] +
"ORDER BY ASC LIMIT 10";
如何使用Android的自定义建议格式完成此操作?
答案 0 :(得分:0)
最后,我放弃了投影图并直接进入原始SQL。 一些警告 - 我的列名中有空格。不要这样做。 '%a%'代表用户查询,在代码中它实际上是selectionArgs [0]。你会注意到我有两个CASE语句,一个是建议,另一个是使用tapped建议作为意图数据字符串而不是行id。在我的情况下是必需的。
像这样:
选择“作者名字”时的情况“LIKE'%an%'那么”作者名字“|| ''|| “作者姓氏” 当“作者姓氏”喜欢'%a%'那么“作者名字”|| ''|| “作者姓氏” 当“作者组名称”喜欢'%a%'然后“作者组名称” 当主题喜欢'%a%'那么主题 结束为suggest_text_1,
当“作者名字”喜欢'%a%'然后“作者名字”||时的情况''|| “作者姓氏” 当“作者姓氏”喜欢'%a%'那么“作者名字”|| ''|| “作者姓氏” 当“作者组名称”喜欢'%a%'然后“作者组名称” 当主题喜欢'%a%'那么主题 结束为suggest_data_intent_id,_id
FROM引号
在哪里(主题喜欢'%a%'
或“作者名字”喜欢'%a%'
或“作者组名称”LIKE'%a%'
或“作者姓氏”LIKE'%a%')
GROUP BY suggest_text_1
ORDER BY suggest_text_1 ASC