[英]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_CODE
和COLUMN_ NAME
設置索引。
此外,通過連接如此多的字符串,您可能會冒sql 注入的風險。
我希望您確實檢查searchText
包含單引號並將它們更改為雙單引號,例如:
searchText = searchText.replace("'", "''");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.