2017-05-10 14 views
0

私はMySQLに新しいので、すべてのコーディングに関連しています。私はあなたの助けが必要です! 私は、次の列を含むテーブルを持っている:(:... WORD1、WORD2、WORD3、などEX) と私が持っているMySql - 複数の単語を含むレコードを分割します

table1 
~~~~~~ 
id, 
question, 
answer, 
keywords. 

「キーワード」欄には、間にコンマで複数の単語が含まれていますユーザが質問をするたびに(質問は配列/キーワードに変換する必要があります)、 の場合は、ボット(PHPで書かれた)を で検索します。クエリはキーワードを検索して、最も一致するキーワードを含む行を探して答えを表示する必要があります。

正しい方法がありますか? ありがとうございます!私は、カンマで区切ってご欄にキーワードを検索するために使用FIND_IN_SET()関数を示唆している

+4

はい。正規化を参照してください。 – Strawberry

+2

正確な方法はテーブルを正規化することです。CSV(カンマ区切りの値)はクエリするのが難しい –

+0

完全一致のキーワードを使用する場合はwokになりません。そうでなければLIKEをクエリに使用して検索します –

答えて

0

1

これは、MySQL(SQL split values to multiple rowsを参照)で可能ですが、ベストプラクティス、最も便利なソリューションは、正規化、最初の形式(だろう原子性)を厳密にする必要があります。

keywordsという名前のテーブルをkeyword_id(インデックス付き)とkeyword(ユニーク)で作成し、両方のフィールドに複合主キーを追加します。

idと別のテーブルをメインテーブルから作成し、keyword_id両方の外部キーを作成します。

多くの質問に多数のキーワードを含めることができるため、これはN対Mリレーション表と呼ばれます。

データを検索するには、JOINを使用します。

Funfact - これは、MongoDB集約($unwindパイプラインステージ)を使用すると簡単な作業になります。

関連する問題