Использование ContactsContract, запрос имени соответствия или адрес электронной почты - PullRequest
0 голосов
/ 17 мая 2018

Можно ли сделать один запрос к ContactsContract, чтобы получить набор контактов, которые соответствуют либо отображаемому имени, либо номеру телефона, либо адресу электронной почты?

По сути, это объединение "таблиц" контактов и данных (в кавычках, поскольку они только выглядят как таблицы через интерфейс, но могут и не быть).

Другими словами, я хотел бы, чтобы предложение where было чем-то вроде (немного упростив синтаксис)

where Contacts.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.RAW_CONTACT_ID = RawContacts.ID and RawContacts.CONTACT_ID = Contacts.ID

Я мог бы сделать это как отдельные запросы без объединения, но тогда упорядочить результаты становится сложно. Я бы хотел, чтобы они упорядочивались по отображаемому имени.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы хотите сопоставить только имя / адрес электронной почты / телефон, вы можете сделать следующее:

WHERE Data.MIMETYPE IN (StructuredName.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE, Email.CONTENT_ITEM_TYPE) 
AND Data.DATA1 LIKE "%?%"

Если вы согласны с расширением возможных полей соответствия, вы можете упростить запрос до:

WHERE Data.DATA1 LIKE "%?%"

Это будет соответствовать CommonDataKinds.StructuredName.DISPLAY_NAME, CommonDataKinds.Email.ADDRESS, CommonDataKinds.Phone.NUMBER и т. Д.

0 голосов
/ 17 мая 2018

Ответ остановил меня на лице.Таблица данных уже является соединением (или выглядит как единое целое, может быть, это внутренняя денормализованная таблица).Таким образом, все, что мне нужно сделать, это запросить все три совпадения напрямую:

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 "%?%")

Обратите внимание на Данные .DISPLAY_NAME, выше.

...