2015-04-16 39 views
0

我有一個SQLite表名爲用戶。每個用戶有一個主要用戶ID和多個SecID(所有整數)。 SecIDs以CSV格式存儲爲單個字段(類型是字符串)。例如,假設用戶1 具有SecIDs如4,5,6,7-和用戶2具有SecIDs爲8,9,55,66。CSV字段sqlite的搜索操作

因此,對於用戶1 : -
用戶ID = 1
SecIDs = 「4,5,6,7」
而對於用戶2 : -
用戶ID = 2
SecIDs =「8,9,55,66」 (依此類推)

現在我的問題是 - 我有一個特定的SecID say 5.我必須提取相應的用戶ID(這是1)。那麼這個操作的查詢是什麼?

P.S-我的SQLite表中可能有成千上萬的用戶記錄。所以搜索查詢應該是最小化時間消耗的優化。

回答

1

這不是你如何做SQL或關係數據庫,所以SQLite沒有一個特定的SELECT語法。例如,你當然可以通過字符串模式搜索所有字段~"12",但這是一個可怕的想法,因爲它匹配12多達112多達112.

你應該做的是重新構建你的數據庫。獲取1對n映射表,將SecID映射到用戶;這是不難的,速度快了很多,而且但兩列的表:

+-----+----+ 
|SecID|User| 
+-----+----+ 
| 4| 1| 
| 5| 1| 
| 6| 1| 
| 7| 1| 
| 8| 2| 
| 9| 2| 
| 55| 2| 
| 66| 2| 
+-----+----+ 

這將是更快,不易出錯,並在RAM和永久存儲更加緊湊。

+0

我們已經考慮過這個選項,但是目前的情況是,我們已經有一個工作代碼,正在運行,其中每個UserID只有一個SecID。現在有一個新的要求,特定的用戶可以有多個SecID。由於(SecID-UserID)對已有一組現有函數,因此我們試圖在現有環境中滿足這一新要求。 添加一個新表格意味着必須在程序中添加新的方法。所以這個疑問:) –

+0

你仍然必須改變你的表,因爲你的字符串字段不是一個整數字段,然後你必須改變你的軟件來處理該字段。你所描述的是我所說的「一個根本不好的設計決定」。 –

+0

完全同意你在「糟糕的設計」部分:),無論如何,我們決定去單獨的表格,因爲我們無法找出任何其他更好的選擇。 –