2017-05-16 43 views
1

我有,我已經實現了搜索查看使用此查詢通過其數據 搜索數據庫:查詢失敗與多個條件

選擇:

//rooms.name = ? OR rooms.name LIKE ? OR rooms.name LIKE ? OR rooms.name LIKE ? 
    private static final String roomsWithSectorsByNameSelection = 
     DeltaContract.RoomsEntry.TABLE_NAME + 
       "." + DeltaContract.RoomsEntry.COLUMN_NAME + " = ? OR " + 
       DeltaContract.RoomsEntry.TABLE_NAME + 
       "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ? OR " + 
       DeltaContract.RoomsEntry.TABLE_NAME + 
       "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ? OR " + 
       DeltaContract.RoomsEntry.TABLE_NAME + 
       "." + DeltaContract.RoomsEntry.COLUMN_NAME + " LIKE ?";  

表:

roomsWithSectorsByNameQueryBuilder.setTables(
      DeltaContract.RoomsEntry.TABLE_NAME + " INNER JOIN " + 
        DeltaContract.SectorsEntry.TABLE_NAME + 
        " ON " + DeltaContract.RoomsEntry.TABLE_NAME + 
        "." + DeltaContract.RoomsEntry.COLUMN_SECTOR_ID + " = " + 
        DeltaContract.SectorsEntry.TABLE_NAME + 
        "." + DeltaContract.SectorsEntry._ID); 

和查詢:

private Cursor getRoomsWithSectorsByName(Uri uri, String[] projection, String sortOrder) { 

    String name = DeltaContract.RoomsEntry.getNameFromRoomsUri(uri); 

    return roomsWithSectorsByNameQueryBuilder.query(deltaDbHelper.getReadableDatabase(), 
      projection, 
      roomsWithSectorsByNameSelection, 
      new String[]{name, (name + "%"), ("%" + name + "%"), ("%" + name)}, 
      DeltaContract.SectorsEntry.TABLE_NAME + "." + DeltaContract.SectorsEntry.COLUMN_NAME, 
      null, 
      sortOrder 
    ); 
} 

大多數搜索我嘗試它工作出色,但對於某些行,即使我鍵入整個單詞

,如果我選擇改變這一點,不工作:

//rooms.name = ? 
private static final String roomsWithSectorsByNameSelection = 
    DeltaContract.RoomsEntry.TABLE_NAME + 
      "." + DeltaContract.RoomsEntry.COLUMN_NAME + " = ?"; 

,並查詢到這一點:

private Cursor getRoomsWithSectorsByName(Uri uri, String[] projection, String sortOrder) { 

String name = DeltaContract.RoomsEntry.getNameFromRoomsUri(uri); 

return roomsWithSectorsByNameQueryBuilder.query(deltaDbHelper.getReadableDatabase(), 
     projection, 
     roomsWithSectorsByNameSelection, 
     new String[]{name}, 
     DeltaContract.SectorsEntry.TABLE_NAME + "." + DeltaContract.SectorsEntry.COLUMN_NAME, 
     null, 
     sortOrder 
); 

}

刪除所有喜歡,它工作正常,

應該注意的是,如果我使用不同的列的第一個查詢無法找到該行查找表,它的工作原理和返回行

還應該注意的是,行中的數據是以阿拉伯語存儲的

所以有什麼幫助嗎?謝謝

編輯

例如: 在第一狀態具有所有喜歡的查詢,當我搜索「رئيسمجلسالإدارة」這是這裏顯示的第一行:

(圖像號之一)

按名稱搜索,只得到類似的行:

(圖像編號二)

但是當我按電話號碼搜索找到它:

(圖像之三)

即使我寫在阿拉伯語中的電話號碼:

(圖像排名第四)

這裏是圖片(由於低信譽造成的限制,將它們放在一個鏈接中)

the images

現在,當我更改查詢並刪除所有喜歡它只是發現它:

using the query with no likes

還應該注意的問題並不侷限於此行,它沒有與其它行也發生遵循同樣的行爲

+0

顯示一些示例數據。 –

+0

[如何 格式化堆棧溢出中的SQL表格 post?](https://meta.stackexchange.com/q/96125) –

+0

@CL。 [這是我的數據庫中的表格](http://pho.to/AhR9z) 無法在該網站中做到這一點導致阿拉伯語rtl對齊搞砸了 –

回答

0

解決了這個問題,失敗的原因是組

的問題,通過參數的查詢, 我不知道爲什麼會造成問題,但去除它只是解決了這個問題,所以我很高興