【发布时间】:2015-07-08 16:44:43
【问题描述】:
我正在尝试搜索联系人列表并按优先顺序向用户显示该列表。顺序是 display_name、电话、电子邮件和地址。我在 Stackoverflow 和 sqlite.org 上查看了一些示例,但没有运气。
如果用户搜索“john”,则 display_name 中所有带有“john”的联系人将首先出现,按降序排列,然后是可能居住在 Johnson City 的联系人等。搜索不区分大小写且有限制到 50 行。
String[] projection = {
DTab._id.toString(),
DTab.contact_id.toString(),
DTab.display_name.toString(),
DTab.phone.toString(),
DTab.email.toString(),
DTab.kv.toString(),
DTab.address.toString(),
};
String where = ""
+"("+DTab.display_name+" LIKE ?) OR "
+"("+DTab.phone+" LIKE ?) OR "
+"("+DTab.email+" LIKE ?) OR "
+"("+DTab.address+" LIKE ?)";
String[] args = new String[]{
"%" + search + "%",
"%" + search + "%",
"%" + search + "%",
"%" + search + "%",
};
String orderBy =
"CASE "
+"WHEN "+DTab.display_name+" LIKE ? != '' THEN 1 "
+"WHEN "+DTab.phone +" LIKE ? != '' THEN 2 "
+"WHEN "+DTab.email +" LIKE ? != '' THEN 3 "
+"ELSE 4 "
+"END LIMIT 50";
Cursor c = detail_db.query(DETAIL_TABLE, projection, where, args, null, null, orderBy);
排序顺序不正确,好像忽略了定义的顺序。我得到一些匹配 display_name 的记录,然后是匹配电子邮件的记录,然后是更多 display_name 记录。感谢您提供有关如何调试它的见解或建议。
【问题讨论】: