2017-06-09 7 views
0

私は問題を抱えています。単純なクエリを使用して列(VARCHAR)から検索し、データベースから+1文字列を追加しています。MySQL - 見つかったものから残りの文字列を取得

My name is SOMEONE. 
Have a great day. 
It's possible. 
Mouse on the way. 
My mouse is on other way. 
Is there any mouse? 

、ユーザーがキーワードmouseを盗んたい:

は、例えば、私は table次の値( title)に持っていた場合。

私は彼が上の値から次のように出力したい:ユーザー種類Mouse onはそれがデータベースから見つかったもの(もしあれば)に1つの文字列を付加し、その上 Mouse on theを返し、なければならない場合も

Mouse on 
mouse is 
mouse? 

私はデータベースの外でそれを行うことができましたが、文字列DISTINCT値を制限付きで取得した後に必要です。

今のところ私はSUBSTRING_INDEX(title , ' ', ".$totalWords.") を使用しました。ここで、$ totalWordsはユーザーが自分のプログラムに送信したユーザーです。私のクエリで

問題は、あなたがotherを入力したときにそれを見つけると返されました: My mouseが、それは私が欲しいものではありません、私は見つかった文字列+1 APPENDからそれへの出力をしたいので、それはother way

だろうもし私私はそれをより良く説明するために最善を尽くします。

ありがとうございます。

+0

私はこれに答えるようになりましたが、そこにいくつの厄介なエッジケースがあるのか​​分かりました。たとえば、 'mouse'という単語が文中の最後の単語になることがあります。この場合、次の単語はなく、句読点(' .'、 '?'、 '!'など)を探します。しかし、文字列の途中で 'mouse'が発生した場合、次の単語の終わりを示すスペースを探しています。 –

+0

MySQLは正規表現のサポートが貧弱です。もし私があなただったら私のアプリケーション層でこれを扱うかもしれません。 –

+0

データベースでこれを行うためのすてきで速い機能を知らない人なら、私は最後にアプリを通してやるでしょう...提案ありがとう! :) – Ultrazz008

答えて

0

ユーザー入力の最初の発生位置を特定するには、LOCATE(substr,str)1を使用できます。その後、SUBSTRING(str FROM pos)2を使用して、ユーザー入力の最初の発生位置で始まる部分文字列を取得し、最後にSUBSTRING_INDEX(title , ' ', ".$totalWords.")を使用して2番目の単語を取得します。

PS:オートコンプリート機能のようですか?おそらくリレーショナルデータベースよりも良い方法があるでしょう。

+0

はい、それはオートコンプリート機能なので、より良い方法を提案できますか?最高のお返事ありがとうございます。 – Ultrazz008

関連する問題