MYSQLは、すべての部分文字列が文字列内に存在する場所を選択します

ルークスミス

次のようなテーブルに文字列が格納されています。

1. "the quick brown fox"
2. "the quick brown fox jumps"
3. "the quick brown fox jumps over the lazy dog"
4. "the quick potato does nothing"

そして、3つの入力単語が与えられた場合、文字列に3つの単語がすべて見つかったときに、そのエントリを返します。

だから私はこれをやっています:

WHERE word1 IN stringfield AND word2 IN stringfield AND word3 IN stringfeild

ただし、オプションで追加の入力単語を提供して、入力単語に最も一致するエントリで結果をフィルタリングしたいと思います。したがって、返されるすべての一致には、少なくとも3つの一致があります。

したがって、たとえば次の入力ワード:

"the", "quick", "brown", "fox", "jumps", "over"

戻り値:

3.
2. 
1. 

3が最も一致するので、次に2、次に1です。そして、少なくとも3つの一致が含まれていなかったため、4は選択されません。

それは可能ですか?そして、これはそれを行うための最速の方法ですか、それともジャンクションテーブルを使用する方が良いでしょうか?もしそうなら、どのように?本当にありがとう。

ゴードン・リノフ

まず、MySQLのフルテキスト機能を使用するのが最善かもしれません。ここでそれについて読んでください

where句を動的に作成していると想定しているので、5つの単語がある場合は、次のように作成できます。

WHERE stringfield LIKE '%word1%' OR
      stringfield LIKE '%word2%' OR
      stringfield LIKE '%word3%' OR
      stringfield LIKE '%word4%' OR
      stringfield LIKE '%word5%' 

INオペレータは、単にあなたがそれをやっていると思う何をしません。

これを実行できる場合、完全なクエリには次のものも含まれます。

WHERE ((stringfield LIKE '%word1%') +
       (stringfield LIKE '%word2%') +
       (stringfield LIKE '%word3%') +
       (stringfield LIKE '%word4%') +
       (stringfield LIKE '%word5%')
      ) >= 3
ORDER BY ((stringfield LIKE '%word1%') +
          (stringfield LIKE '%word2%') +
          (stringfield LIKE '%word3%') +
          (stringfield LIKE '%word4%') +
          (stringfield LIKE '%word5%')
         ) DESC

MySQLは、ブール式を数値コンテキストの整数として扱います。これにより、一致数のカウントが特に簡単になります。しかし、私が言うように、フルテキストインデックスはあなたが本当に必要とするものかもしれません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

正規表現:特定の文字や他の部分文字列の前にあるすべてを選択するか、部分文字列も文字も存在しない場合はすべてを選択します

分類Dev

文字列内の特定の場所に部分文字列が存在するかどうかを確認します

分類Dev

文字列内の特定の場所に部分文字列が存在するかどうかを確認します

分類Dev

MySQL-部分文字列がcharの前にある*を選択します

分類Dev

SQL区切り文字が存在する場合は部分文字列を選択し、存在しない場合は完全な文字列を指定します

分類Dev

SQLのすべての部分文字列が含まれている場合は、文字列を検索します

分類Dev

文字列に部分文字列が含まれている場合、その部分文字列を取得します

分類Dev

存在する場合は文字列の部分文字列を返します

分類Dev

bashの文字列内の部分文字列を選択する

分類Dev

指定された文字列内の部分文字列の場所を取得します

分類Dev

SQLServer-最後のハイフンに続くすべての文字の部分文字列を選択します

分類Dev

置換文字列のサイズが部分文字列と異なる場合は、スライスを使用して部分文字列のすべての出現箇所を置換します

分類Dev

存在する場合は部分文字列を削除します

分類Dev

XML内の任意の場所でテキストの特定の部分文字列を検索し、XSLTを使用してこのテキストを選択する方法

分類Dev

python re.searchは、文字列に部分文字列が存在する場合でも、Noneを返します

分類Dev

部分文字列を作成しようとすると、「インデックスと長さは文字列内の場所を参照する必要があります」

分類Dev

文字列内の部分文字列を選択的に置き換えます

分類Dev

2つの文字列の間に部分文字列が存在する場合は、2つの文字列の間にテキストを抽出します

分類Dev

文字列内のすべての文字が別の文字列内にある場合はTrueを返します

分類Dev

Linux: リスト内の他の場所に部分文字列がある場合、リストから文字列を削除します

分類Dev

他の部分文字列が存在するため、Perl正規表現は部分文字列を抽出します

分類Dev

Javaで文字列内のすべての部分文字列を検索します

分類Dev

NSString内の部分文字列のすべての場所を検索します(最初だけではありません)

分類Dev

RegExを使用して部分文字列を特定の場所に移動することは可能ですか?

分類Dev

両方がリストにある場合は、別の文字列の部分文字列であるリスト内の文字列を削除します

分類Dev

特定の行に部分文字列が含まれている場合は、他の部分文字列を出力します

分類Dev

列に正確な文字列が含まれる場所を選択します

分類Dev

Postgres:列値の最大整数部分文字列を選択します

分類Dev

列に3つの大文字が連続して含まれる場所を選択します

Related 関連記事

  1. 1

    正規表現:特定の文字や他の部分文字列の前にあるすべてを選択するか、部分文字列も文字も存在しない場合はすべてを選択します

  2. 2

    文字列内の特定の場所に部分文字列が存在するかどうかを確認します

  3. 3

    文字列内の特定の場所に部分文字列が存在するかどうかを確認します

  4. 4

    MySQL-部分文字列がcharの前にある*を選択します

  5. 5

    SQL区切り文字が存在する場合は部分文字列を選択し、存在しない場合は完全な文字列を指定します

  6. 6

    SQLのすべての部分文字列が含まれている場合は、文字列を検索します

  7. 7

    文字列に部分文字列が含まれている場合、その部分文字列を取得します

  8. 8

    存在する場合は文字列の部分文字列を返します

  9. 9

    bashの文字列内の部分文字列を選択する

  10. 10

    指定された文字列内の部分文字列の場所を取得します

  11. 11

    SQLServer-最後のハイフンに続くすべての文字の部分文字列を選択します

  12. 12

    置換文字列のサイズが部分文字列と異なる場合は、スライスを使用して部分文字列のすべての出現箇所を置換します

  13. 13

    存在する場合は部分文字列を削除します

  14. 14

    XML内の任意の場所でテキストの特定の部分文字列を検索し、XSLTを使用してこのテキストを選択する方法

  15. 15

    python re.searchは、文字列に部分文字列が存在する場合でも、Noneを返します

  16. 16

    部分文字列を作成しようとすると、「インデックスと長さは文字列内の場所を参照する必要があります」

  17. 17

    文字列内の部分文字列を選択的に置き換えます

  18. 18

    2つの文字列の間に部分文字列が存在する場合は、2つの文字列の間にテキストを抽出します

  19. 19

    文字列内のすべての文字が別の文字列内にある場合はTrueを返します

  20. 20

    Linux: リスト内の他の場所に部分文字列がある場合、リストから文字列を削除します

  21. 21

    他の部分文字列が存在するため、Perl正規表現は部分文字列を抽出します

  22. 22

    Javaで文字列内のすべての部分文字列を検索します

  23. 23

    NSString内の部分文字列のすべての場所を検索します(最初だけではありません)

  24. 24

    RegExを使用して部分文字列を特定の場所に移動することは可能ですか?

  25. 25

    両方がリストにある場合は、別の文字列の部分文字列であるリスト内の文字列を削除します

  26. 26

    特定の行に部分文字列が含まれている場合は、他の部分文字列を出力します

  27. 27

    列に正確な文字列が含まれる場所を選択します

  28. 28

    Postgres:列値の最大整数部分文字列を選択します

  29. 29

    列に3つの大文字が連続して含まれる場所を選択します

ホットタグ

アーカイブ