2016-01-27 10 views
5

の代わりにORを使って結合クエリを作成しました。GreenDao v2.1.0でSQLite DBを生成しました。 Here is its diagram (a tiny piece of it)GreenDaoで、AND

連絡先には電話番号が多数ある場合があります。 検索クエリを作成したい:GIVEN_NAMEまたはFAMILY_NAMEまたはPHONE.NUMBERに特定の単語が含まれているすべての連絡先をリストする。

たとえば、with these entriesと言います。「bob」という言葉を使用した場合は、連絡スポンジボブが返されます。 「222」という言葉を使用すると、Patrick Starの連絡先が返されます。

二つのテーブルがクエリに含まれている、ので、私は、コードのこの部分との結合溶液に頼っ:

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 

5行目ポイント:

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(); 

これは、以下のSQLを生成問題を解決する: "AND"コネクタ。私は必然的にそれを "OR"に置き換えようとしています。

何か不足していますか?私はJOINソリューションを離れるべきですか? ありがとう:)

答えて

1

私は同じ問題があります。グレンダオは現在それを行うことができないようです。代わりにqueryRaw()を使用しています。