簡體   English   中英

Sqlite- 按所需順序顯示結果

[英]Sqlite- Show results in desired order

我創建了一個包含兩列的 sqlite 表 -代碼名稱,並在其中存儲了數據。 為用戶提供搜索視圖以輸入代碼或名稱,應用程序會相應地顯示結果。

我正在使用以下查詢來獲取結果-

cursor = db.query(TABLE_SEARCH, columns, COLUMN_CODE + " LIKE '" +
        searchText + "%' or " + COLUMN_ NAME + " LIKE '%" + searchText + "%'", null, null, null, null)

但問題是沒有按所需順序顯示結果。 我想按以下順序顯示結果-

1.在頂部顯示與搜索文本完全匹配的代碼的結果。

2.下面顯示名稱與搜索文本完全匹配的結果。

3.下面顯示以搜索文本開頭的代碼的結果。

4.下面顯示包含搜索文本的名稱的結果。

如果我運行多個 sqlite 查詢,它會使搜索變慢。如何在不影響性能的情況下以最佳方式完成我的要求?

query()方法的最后一個參數是 ORDER BY 子句。
嘗試條件排序:

cursor = db.query(
    TABLE_SEARCH, 
    columns, 
    COLUMN_CODE + " LIKE '" + searchText + "%' OR " + 
    COLUMN_ NAME + " LIKE '%" + searchText + "%'", 
    null, 
    null, 
    null, 
    "CASE " + 
    "WHEN " + COLUMN_CODE + " = '" + searchText + "' THEN 1 " +
    "WHEN " + COLUMN_ NAME + " = '" + searchText + "' THEN 2 " +
    "WHEN " + COLUMN_CODE + " LIKE '" + searchText + "%' THEN 3 " +
    "WHEN " + COLUMN_ NAME + " LIKE '%" + searchText + "%' THEN 4 " + 
    "END, " + COLUMN_CODE + ", " + COLUMN_ NAME
)

為了獲得更好的性能,您應該為列COLUMN_CODECOLUMN_ NAME設置索引。
此外,通過連接如此多的字符串,您可能會冒sql 注入的風險。
我希望您確實檢查searchText包含單引號並將它們更改為雙單引號,例如:

searchText = searchText.replace("'", "''");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM