Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQlite数据库中存储同一类别的多个字符串?_Sqlite - Fatal编程技术网

如何在SQlite数据库中存储同一类别的多个字符串?

如何在SQlite数据库中存储同一类别的多个字符串?,sqlite,Sqlite,我需要为唯一ID分配多个标记。最终目标是搜索带有特定标记的ID 我应该如何存储标签? 这不是一个大数据库,最好是一个简单的解决方案 ID | Tags ----------------------------------------------- b6e490a44fcd5cc92f3d0f97a23f1c83 | foo bar bla d41d8cd98f00b204e9800998ecf8427e | ble blu bla 您

我需要为唯一ID分配多个标记。最终目标是搜索带有特定标记的ID

我应该如何存储标签? 这不是一个大数据库,最好是一个简单的解决方案

ID                               | Tags
-----------------------------------------------
b6e490a44fcd5cc92f3d0f97a23f1c83 | foo bar bla
d41d8cd98f00b204e9800998ecf8427e | ble blu bla

您可以保留当前的表设计,并使用全文搜索在“标记”列中查找单个标记。但如果搜索词和/或标记可以跨越多个词,这可能会导致问题

更安全的方法可能是规范化您的表,并在表中为每个标记指定一条单独的记录,如下所示:

ID                               | Tags
-----------------------------------------------
b6e490a44fcd5cc92f3d0f97a23f1c83 | foo
b6e490a44fcd5cc92f3d0f97a23f1c83 | bar
b6e490a44fcd5cc92f3d0f97a23f1c83 | bla
d41d8cd98f00b204e9800998ecf8427e | ble
d41d8cd98f00b204e9800998ecf8427e | blu
d41d8cd98f00b204e9800998ecf8427e | bla
现在,例如,如果您想找出哪些ID具有foo或bar标记,可以使用以下简单查询:

SELECT DISTINCT ID
FROM yourTable
WHERE Tags IN ('foo', 'bar')
请注意,现在ID列不再是唯一的,因此不能用作主键。请尝试添加一个新列作为主键列:

CREATE TABLE IF NOT EXISTS mytable (
    p_key integer PRIMARY KEY, 
    id TEXT PRIMARY KEY,
    tags TEXT
)

不过,这很有意义,在搜索多个字符串时,如何避免多次返回ID。假设我搜索“foobar”,我只需要返回一次ID。@MikeSkril再次检查我的查询。我使用了SELECT DISTINCT,它只返回一次ID,即使它出现了多次。我们可以用多种方法来删除重复项,但这可能是最简单的方法。我遇到了一个错误:UNIQUE constraint失败,我想这是因为我的ID是主键,它必须是唯一的,对吗?CREATE TABLE如果不存在mytable id文本主键,标记文本我用CREATE TABLE语句更新了我的答案,该语句应该可以工作。