2015-09-27 29 views
0

我正在使用以下代碼來搜索「英文」列。還有另一個欄目叫做「BANGLA」。我應該如何修改代碼,以便同時搜索「ENGLISH」和「BANGLA」列並作爲組合結果返回?如何實現Android Sqlite Union rawQuery?

public List<Bean> getWords(String englishWord) { 
     if(englishWord.equals("")) 
      return new ArrayList<Bean>(); 

     String sql = "SELECT * FROM " + TABLE_NAME + 
       " WHERE " + ENGLISH + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100 "; 

     SQLiteDatabase db = initializer.getReadableDatabase(); 

     Cursor cursor = null; 
     try { 
      cursor = db.rawQuery(sql, new String[]{"%" + englishWord + "%"}); 

      List<Bean> wordList = new ArrayList<Bean>(); 
      while(cursor.moveToNext()) { 
       int id = cursor.getInt(0); 
       String english = cursor.getString(1); 
       String bangla = cursor.getString(2); 
       String status = cursor.getString(3); 
       wordList.add(new Bean(id, english, bangla, status)); 
      } 

      return wordList; 
     } catch (SQLiteException exception) { 
      exception.printStackTrace(); 
      return null; 
     } finally { 
      if (cursor != null) 
       cursor.close(); 
     } 
    } 

我體改的String sql

String sql = "SELECT * FROM " + TABLE_NAME + 
       " WHERE " + ENGLISH + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100 " + " UNION ALL " + " SELECT * FROM " + TABLE_NAME + 
       " WHERE " + BANGLA + " LIKE ? ORDER BY " + ENGLISH + " LIMIT 100"; 

但是,這是行不通的。我收到此錯誤:

ORDER BY clause should come after UNION ALL not before (code 1): , while compiling: SELECT * FROM words WHERE en_word LIKE ? ORDER BY en_word LIMIT 100 UNION ALL SELECT * FROM words WHERE bn_word LIKE ? ORDER BY en_word LIMIT 100 
+0

這不起作用? – e4c5

+0

你得到了什麼確切的錯誤?難道你沒有添加第二個選擇參數? 'cursor = db.rawQuery(sql,new String [] {「%」+ englishWord +「%」,「%」+ englishWord +「%」});' – jyanks

+0

我越來越'wordList == null 。我按照建議添加了第二個選擇參數,但仍然無效。 – user2872856

回答

1

您需要ORDER BY和LIMIT移動到結束這樣的:

SELECT * FROM TABLE_NAME 
WHERE ENGLISH LIKE ? 
UNION ALL 
SELECT * FROM tull 
WHERE BANGLA LIKE ? 
ORDER BY ENGLISH LIMIT 100 

不過100行這個總訂貨會只有英語和限制。每種語言你需要100行嗎?如果你想通過這兩種語言來命令你可以通過別名別名列和順序:

SELECT *, ENGLISH AS TEXT FROM tull 
WHERE ENGLISH LIKE ? OR BANGLA LIKE ? 
UNION ALL 
SELECT *, BANGLA AS TEXT FROM tull 
WHERE BANGLA LIKE "" 
ORDER BY TEXT LIMIT 100; 

你仍然需要第二個選擇參數添加在評論中提到jyanks。

+0

謝謝。這解決了我的問題。 – user2872856