Android 使用ContactsContract,查询匹配的姓名或电子邮件
是否可以对contacts Contract执行一次查询,以获得一组与显示名称、电话号码或电子邮件地址匹配的联系人 这本质上是联系人和数据“表”的连接(在引号中,因为它们在接口中看起来像表,但可能不是) 换句话说,我想要一个where子句(稍微简化语法) 这些表是像这样连接的Android 使用ContactsContract,查询匹配的姓名或电子邮件,android,android-contentprovider,contactscontract,Android,Android Contentprovider,Contactscontract,是否可以对contacts Contract执行一次查询,以获得一组与显示名称、电话号码或电子邮件地址匹配的联系人 这本质上是联系人和数据“表”的连接(在引号中,因为它们在接口中看起来像表,但可能不是) 换句话说,我想要一个where子句(稍微简化语法) 这些表是像这样连接的 Data.RAW_CONTACT_ID = RawContacts.ID and RawContacts.CONTACT_ID = Contacts.ID 我可以在没有连接的情况下作为单独的查询来完成这项工作,但是排序结
Data.RAW_CONTACT_ID = RawContacts.ID and RawContacts.CONTACT_ID = Contacts.ID
我可以在没有连接的情况下作为单独的查询来完成这项工作,但是排序结果变得很困难。我想按显示名称来订购。答案让我很难堪。 数据表已经是一个连接(或者看起来像一个连接,可能在内部是一个非规范化的表)。因此,我需要做的就是直接查询所有三个匹配项:
where Data.DISPLAY_NAME like "%?%"
or (Data.MIMETYPE = Phone.CONTENT_ITEMTYPE
and CommonDataKinds.Phone.NUMBER like "%?%")
or (Data.MIMETYPE = Email.CONTENT_ITEMTYPE
and CommonDAtaKinds.Email.ADDRESS like "%?%")
注意上面的Data.DISPLAY_NAME。如果您只想匹配NAME/email/phone,则可以执行以下操作:
WHERE Data.MIMETYPE IN (StructuredName.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE, Email.CONTENT_ITEM_TYPE)
AND Data.DATA1 LIKE "%?%"
如果您同意扩展可能的匹配字段,则可以将查询简化为:
WHERE Data.DATA1 LIKE "%?%"
这将匹配CommonDataTypes.StructuredName.DISPLAY\u NAME
,CommonDataTypes.Email.ADDRESS
,CommonDataTypes.Phone.NUMBER
,等等
WHERE Data.DATA1 LIKE "%?%"