2016-01-27 14 views
5

Tôi đã tạo một DB SQLite với GreenDao v2.1.0. Here is its diagram (a tiny piece of it)Trong GreenDao, hãy tạo truy vấn tham gia bằng OR thay vì AND

LIÊN HỆ có thể có nhiều số điện thoại. Tôi muốn thực hiện truy vấn tìm kiếm: liệt kê tất cả các liên hệ có GIVEN_NAME hoặc FAMILY_NAME hoặc PHONE.NUMBER chứa một từ cụ thể.

Ví dụ: with these entries, nếu tôi sử dụng từ "bob", liên hệ với Sponge Bob sẽ được trả lại. Nếu tôi sử dụng từ "222", số liên lạc Patrick Star sẽ được trả lại.

Kể từ khi, hai bảng tham gia vào truy vấn, tôi viện đến JOIN giải pháp với đoạn mã này:

QueryBuilder<Contact> qb = getContactDao(context).queryBuilder(); 
    qb.whereOr(ContactDao.Properties.Given_name.like("%" + word + "%"), 
       ContactDao.Properties.Family_name.like("%" + word + "%")); 
    qb.join(Phone.class, PhoneDao.Properties.Contact_id) 
     .where(PhoneDao.Properties.Number.like("%" + word + "%")); 
    List<Contact> contacts = qb.list(); 

này tạo ra các SQL sau:

SELECT T."_id", T."GIVEN_NAME", T."FAMILY_NAME" 
FROM "CONTACT" T 
JOIN PHONE J1 
ON T."_id"=J1."CONTACT_ID" 
WHERE (T."GIVEN_NAME" LIKE ? OR T."FAMILY_NAME" LIKE ?) AND J1."NUMBER" LIKE ?  
COLLATE LOCALIZED ASC 

Những điểm dòng thứ 5 vấn đề: đầu nối "AND". Tôi đang cố gắng thay thế nó bằng một chữ "HOẶC".

Tôi có thiếu gì đó không? Tôi có nên rời khỏi giải pháp JOIN không? Cảm ơn :)

Trả lời

1

Tôi gặp vấn đề tương tự. Có vẻ như greendao hiện không thể làm điều đó. Thay vào đó, tôi đang sử dụng queryRaw().

Các vấn đề liên quan