0

テーブル全体を検索し、長い文字列内で最も多く出現するフレーズ (最大 3 単語) を返そうとしています。全文検索ができると思いますが、何とも一致しません...

テーブル

I like Iron Man 3 so much
Iron Man 3 sucked alot
Iron Man really saved the day
I like cats
cats are cool

結果

Iron Man
Iron Man 3
cats

クエリ

SELECT *
    FROM table
    WHERE substring(text, up to 3 words) OCCURS MOST
    ORDER BY OCCURRENCE DESC
4

1 に答える 1

0

あなたが本当にそれに興味があるなら、テキスト(非SQL)をword_listと呼ばれるテーブルに解析するべきだと思います。

create table phrases (word1 varchar, word2 varchar, word3 varchar, cnt int);

そしてコード:

$q = query("select comment from comments");
while ($row = array_read_line($q)){

$words = preg_split('/\s/', $row['comment']);
$previous1 = false;
$previous2 = false;

foreach($words as $word){
     if($previous1 and $previous2){
        .. here comes quoting, security, mysql-injection-safety, min length
        query("update relations set cnt = cnt+1 "
            . " where word1 = '$previous1', word2 = '$previous2', word3='$word'" ) 
        if (rows_afected == 0){
            query("insert into relations "
            . " set cnt = 1, word1 = '$previous1', "
            . " word2 = '$previous2', word3='$word'" ) 
        }
    }
    previous1 = $previous2;
    $previous2 = $word;
}

}

次に、count desc で並べ替えます。

于 2013-05-07T20:01:02.070 に答える