【问题标题】:Search query in sqlite3 database for certain items在 sqlite3 数据库中搜索某些项目的查询
【发布时间】:2013-03-23 07:01:24
【问题描述】:

我有一个项目列表作为 C++ 中的字符串数组。我还有一个包含列入黑名单的字符串的 sqlite3 数据库。现在我必须使用我必须用 0 或 1 标记它们的项目列表,告诉我它们是否被列入黑名单。我可以通过使用“Select * from ITEMS_TABLE WHERE item = string[i]”来一一搜索它们,但这需要时间。我也可以从数据库中提取黑名单,然后在我的列表中查找它们。但是有没有一种有效的方法来找出我列表中的哪些项目被列入黑名单。

假设我有以下结构

struct item 
{ 
    char name[MAX_NAME_LEN]; 
    bool isBlacklisted; 
};

然后我使用这些结构的数组来知道它们中的任何一个是否被列入黑名单。因此,如果在数据库中找到该条目,我必须将 isBlacklisted 标志设置为 true。如果我使用 Select 方法,它会返回被列入黑名单的项目列表。但我仍然需要使用字符串比较在我的数组中找到它们。有没有一些有效的方法是。数据库是否提供任何此类功能。

感谢和问候, 迈克。

【问题讨论】:

    标签: c++ sqlite


    【解决方案1】:

    根据您的要求设计您的数据库结构。您想知道黑名单项目只需使用包含 0 或 1 的列作为黑名单,即您的表 ITEMS_TABLE 有这些列

    itemcode itemname isblacklist
    1        item1    0
    2        item2    0
    3        item3    1
    

    现在

    Select * from ITEMS_TABLE WHERE isblacklist=0
    

    这将返回非黑名单项目和

    Select * from ITEMS_TABLE WHERE isblacklist=1
    

    将返回黑名单项目,希望这对你有帮助

    【讨论】:

    • 您好,感谢您的回答,这确实有助于我提高工作效率,但您能否为更新后的问题提供解决方案
    • 我有一个这样的表,但我得到另一个列表,其中包含 N 个项目,这些项目可能存在也可能不存在于数据库中。因此,如果其中任何一个存在于数据库中,我必须将其标记为黑名单。数据库仅包含列入黑名单的项目,我将获取项目列表并扫描这些项目中的哪些被列入黑名单。如果我按照您上面提到的那样做,我将从 db 中获取项目列表,现在我必须将此列表与 N 项目列表匹配,如果找到匹配项,则设置黑名单标志。我只是想避免字符串比较和看看能不能用数据库做
    • 是的,如果这两个列表之间有任何相似之处,您可以通过过滤来做到这一点,即 Select * from ITEMS_TABLE WHERE isblacklist=0 and itemcode in (2,4,5)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多