2016-09-26 33 views
-3

我需要記錄給定主機名用於連接到我們的聊天應用程序的用戶名。在SQLite中存儲用戶名和IP地址列表的最佳方法是什麼?

數據庫表有2列hostnameusername

例子:

hostname | username 
--------------------------- 
127.0.0.1 | ben bill james rob 
127.0.0.2 | bob sarah 
127.0.0.3 | emma jessica xaria 

在我的Ruby代碼,我將調用例如add_to_username_tracker(hostname,username)然後我需要代碼,以確定該IP地址是否存在,如果是這樣,取目前的結果,檢查是否有新用戶名存在(如果存在,則忽略)或將其添加並按字母順序排列。

這樣做的最佳方法是什麼?這隻能在SQLite中完成,還是需要Ruby來完成?我正在使用sqlite3寶石。

+1

您的問題沒有很好的定義,太寬泛。請閱讀「[問]」和「[mcve]」。 –

回答

0

從數據庫的角度來看,您的表格需要看起來更像這樣。

create table host_users (
    hostname varchar(20) not null, 
    username varchar(20) not null, 
    primary key (hostname, username) 
); 

在我的Ruby代碼,我將調用例如 add_to_username_tracker(主機名,用戶名)然後我需要編寫代碼以 確定IP地址是否存在,如果是這樣,獲取 目前的結果,檢查新用戶名是否存在(如果存在 則忽略)或添加它並按字母順序排列。

不,不,不。只需插入表中,並在插入違反UNIQUE約束時捕獲錯誤。

insert into host_users values ('127.0.0.1', 'bob'); 
insert into host_users values ('127.0.0.1', 'bob'); 
Error: UNIQUE constraint failed: host_users.hostname, host_users.username 

這隻需一個 SQL語句。無論如何,你必須捕捉錯誤。除了違反UNIQUE約束之外,還有很多可能會出錯的地方。

要將每個主機名的用戶名連接成一行,請使用GROUP_CONCAT()。

select hostname, group_concat(username) 
from host_users 
group by hostname; 
相關問題