2017-06-09 4 views
0

一意のIDに複数のタグを割り当てる必要があります。最終的な目標は、特定のタグを持つIDを検索することです。SQliteデータベースに同じカテゴリの複数の文字列を保存する方法は?

タグはどのように保存する必要がありますか? これは大きなデータベースではなく、単純な解決策が最適です。

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

答えて

1

さて、あなたの現在のテーブルのデザインを保持し、Tags列に個々のタグを探すために、フルテキスト検索を使用することができるかもしれません。しかし、これは、検索語やタグが複数の単語にまたがる可能性がある場合、問題につながる可能性があります。たとえば、あなたはどれを見つけるしたい場合など今

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

:安全な賭けはにあるかもしれない

は、このような何かをあなたのテーブルを正規化し、各タグにテーブル内の別のレコードを与えますIDは、次の単純なクエリを使用することができfooまたはbarタグを持っている:今ID列はもはやユニークであるため、できません

SELECT DISTINCT ID 
FROM yourTable 
WHERE Tags IN ('foo', 'bar') 

注意主キーとしての役割を果たす。代わりに、主キー列として新しい列を追加してみてください:

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

しかし、複数の文字列を検索する際にIDを何度も返すことを避けるにはどうすればよいでしょうか。私が 'foo bar'を検索したとしましょう。私は一度だけ返されるIDが必要です。 – MikeSkril

+0

@MikeSkril私のクエリをもう一度チェックしてください。私は 'SELECT DISTINCT'を使いました。これは、複数回出現したとしても、一度' ID'を返すだけでした。重複を削除する複数の方法でこのクエリを使用することもできますが、これは最も簡単な方法です。 –

+0

エラーが発生しました:「UNIQUE制約に失敗しました」私のIDはプライマリキーであり、ユニークでなければならないのでしょうか? 'mytableが存在しない場合のテーブルの作成(ID TEXT PRIMARY KEY、TEXTタグ) ' – MikeSkril

関連する問題