(LEFT은 가입 및 CASE) : 나는 시스템의 주소록에있는 모든 연락처의 ID와 이름을 선택 찾고ContentResolver.query()로이 Android 쿼리를 수행 할 수 있습니까? 안드로이드에 내가 (의사 코드) 다음 쿼리를 수행하기 위해 찾고 있어요
SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP
FROM CONTACTS C
LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ?
, 연락처가 그룹 ?
의 멤버인지 여부를 나타내는 0/1 필드와 함께 기본 연락처 ContentProvider를 통해 전달됩니다.
물론 모든 연락처를 충분히 쉽게 가져올 수 있으며 루프를 통과하고 어댑터 클래스에서 멤버를 쉽게 쉽게 쿼리 할 수 있습니다. 그러나 두 개의 쿼리를 하나의 외부 조인 된 쿼리로 수행하면 훨씬 우수한 성능을 얻을 수 있다고 생각합니다.
표준 고급 수준의 문자열 프로젝션과 ContentResolver.query()
방법으로이 작업을 수행 할 수 있습니까? 또는 이러한 종류의 쿼리는보다 직접적인 SQL 실행을 필요로합니까?
주위를 검색 할 때 SQLLiteDatabase를 다른 응용 프로그램을 쿼리하는 데 사용할 수 없다는 인상을받습니다. 제 경우에는 CONTACTS URI가 있지만 자신의 데이터 저장소를 쿼리 할 때만 사용할 수 있습니다. 이 올바른지? 어떤 경우에는 내 활동을 바인딩 할 때 어댑터 클래스에서 하위 쿼리를 수행하는 데 어려움을 겪을 것입니다. – eidylon
@eidylon : 연락처 db를 쿼리하고 있다는 사실을 알지 못했습니다. 네, 맞습니다 :( – Macarse
Drat! Oh ... 음 ... 앞으로 그리고 위쪽으로! 감사합니다! – eidylon