1

私がチェックするとしましょう

 $strig = "how can i do this";

すべての語順オプションでデータベースに既に存在しますか? のように:「私はこれを行うことができます」または「私はこれをどのように行うことができます」... ...

私のデータベースは次のようになります。

 id    string
  1    how can i do this
  2    hello how are you
  3    how i can do this world
  4    another title
 etc   etc

ありがとう

4

6 に答える 6

3

可能な組み合わせの数はn!(サンプルでは 120) なので、この文字列が既に存在するかどうかを確認するのは非常に複雑な作業です。
次のアルゴリズムを使用することをお勧めします。

  • StringHashテーブルに新しい列を追加する
  • 文字列の挿入順序 (アルファベット順など) で、そのハッシュを計算し、次の場所に格納しStringHashます。
    "how can i do this" => "can do how i this" => md5("can+do+how+i+this")
  • 特定の文字列がデータベースに存在するかどうかを確認したい場合は、上記のようにそのハッシュを再度計算し、データベースにクエリを実行しますYourTable.StringHash
于 2012-04-25T07:50:08.993 に答える
2

これをSQLのみで修正したい場合、これは難しい問題ですが、それはさておき:

@er.anuragjain が言うように、でクエリを実行できますがLIKE %word%、例の「3」にもヒットします。

したがって、次のようなクエリがある場合:

SELECT * FROM table WHERE
     column LIKE '%how%' 
AND  column LIKE '%can%'
AND  column LIKE '%i%'
AND  column LIKE '%do%'
AND  column LIKE '%this%'

すると 3 番も出てきます。ですから、他に単語がないかどうかを確認する必要があります。単語数を確認することでこれを行うことができます (単語が 5 つあり、すべての単語がそこにある場合は完了です)。

文字数のチェックは簡単ではありませんが、コツがあります。いくつかの情報源から*:

SELECT LENGTH(total_words) - LENGTH(REPLACE(total_words, ' ', ''))+1
FROM tbl_test;

トリックを行う必要があります。を確認LIKEし、単語数を確認すれば完了です。しかし、これがかなりの解決策であるかどうかはわかりません:)

于 2012-04-25T08:18:52.290 に答える
0

mysqlのワイルドカード呼び出しである必要があります

select * From tablename Where columnname LIKE '%how%' 
于 2012-04-25T07:30:48.687 に答える
0

検索している文字列に次の"how" and "can" and "I" and "do" and "this" ものが含まれているかどうかを尋ねることができます: (mysql の構文はわかりませんが、概念はわかります)

    if(string.contain("how")&&
       string.contain("can")&&
       string.contain("I")&&
       string.contain("do")&&
       string.contain("this"))
     {
       //you find the string
     }
于 2012-04-25T07:23:33.030 に答える
0

mysql を使用している場合は、これを試してください。

select * from tablename where columnname Like '%how%' AND columnname LIKE '%can%' AND columnname LIKE '%I'% AND columnname LIKE '%DO'% AND columnname LIKE '%This'%;

ここで、動的な値がある場合は$string、最初にそれをスペースで分割する配列に変換します。次に$condition、配列から変数を作成し、それを where に追加して、 select * from tablenameそのクエリを実行します。

ありがとう

于 2012-04-25T07:49:21.573 に答える