2011-12-20 12 views
0

私は数日前からこれを試してきましたが、必要に応じて正確に動作させることができず、検索に手間がかかりませんでした。私のデータベースでMySQL:Y単語前後のX単語を返す

私はそうのようなそれらのリンク付きの記事があります:私は記事内のリンクを見つけて、前に5ワードまで報告されて行うことができるようにしたいどのような

one two three four five six seven eight nine ten eleven twelve thirteen fourteen 
<a href="google.com>Google!</a> one two three four five six seven eight nine ten 

を、最大5誰もがこれを達成するためのクエリで私を助けることができる

ten eleven twelve thirteen fourteen 
<a href="google.com>Google!</a> one two three four five 

(例えば)の後の言葉だから私の結果は次のようなものでしょうか?

+0

これは言語で行う方が簡単ですあなたはそのようなオプションを持っていますか?また、のフルテキストを事前に知っていますか? –

+0

はい、最終的にすべてがPHPになります。残念ながらリンクテキストは常に異なるので...事前にそれを知っている:( –

答えて

5
SET @s = 'one two three four five six seven eight nine ten eleven twelve thirteen fourteen 
<a href="google.com>Google!</a> Albuquerque one two three four five six seven eight nine ten'; 
SELECT CONCAT(
    SUBSTRING_INDEX(LEFT(@s, INSTR(@s, '<a href="') -1), ' ', -6) -- 5 words before ' <a href="' 
    , SUBSTRING(@s, INSTR(@s, '<a href="'), INSTR(@s, '</a>') - INSTR(@s, ' <a href="') + 3) -- the href 
    , SUBSTRING_INDEX(SUBSTRING(@s, INSTR(@s, '</a>') + 4, 10000), ' ', 6) -- 5 words after '</a>' 
    ); 

ドキュメントについては、http://dev.mysql.com/doc/refman/5.5/en/string-functions.htmlを参照してください。

これは、文字列の最初のリンクで機能します。私はプレゼンテーションコード(yrの場合はPHP)でこれを行いますが、SQLで何ができるのかは驚くべきことです。リンクのない入力では、あなたの望むものが得られない可能性があるため、あなたの入力を確認してください(WHERE '< a href = "%</a >%")。

+0

"body"がカラムの場合手前の@sにどのように情報を入力すればよいでしょうか?これはPHPであればこれを受け取りやすく読みやすいでしょうか? PHPよりMySQLより。 –

+0

"body"を "@s"がある場所で使い、CONCAT(...)全体を今使っているクエリに差し込みます。 – Andrew

1

デフォルトでは実行できません。 Regexpはブール値を返すだけですが、外部のregexpプラグイン(like this one)を使用すると可能かもしれません。

関連する問題