2017-09-28 12 views
0

はのは、私はテーブルshortTextを持っているとしましょう:カウント言葉

ID | SHORT_TEXT 
------+--------------------------- 
001 | The elephants went in two by two 
002 | Needles and haystack 
003 | Somewhere over the rainbow 
... 

のような結果を得るために(ストアドプロシージャを使用せずに)列SHORT_TEXTの各単語の出現をカウントするshortTextを照会する方法

WORD | OCCURENCE 
------+------------ 
the | 2 
and | 1 
over | 1 
... 

編集:

という一般的な答えの提供し(言葉の可変数が与えられた最大なし)はありませんこれまでのところSOで編集しました。

+0

何を試しましたか?あなたのSQLクエリやストアドプロシージャはどこですか? –

+0

[VARCHARフィールド内の文字列の出現回数をカウントする]の可能な重複?](https://stackoverflow.com/questions/12344795/count-the-number-of-occurrences-of-a-string-in- a-varchar-field) – ASOlivieri

+0

https://stackoverflow.com/questions/1094888/counting-word-occurrences-in-a-table-column –

答えて

1

理論的には、文字列「shortText」を個々の単語(空白で区切られたIE)に分割し、すべての配列を1つの巨大なリストに結合して単語を数えたいと思います。私はMySQL私はあなたが列にフルテキストインデックスを構築する場合は、あなたが作成されたテーブルから単語を得ることができると思い

select word,count(*) occurrence 
    from 
(select 
    unnest(string_to_array(lower(short_text),' ')) word 
    from shortText) words 
group by words.word 
order by count(*) desc 
1

:これは、しかし、私は下のPostgreSQLの原理を示すことができ、あまりにも多くを求めてすることができます文字列のトークン化をサポートします。あなたは、インデックス....

SELECT word, doc_count, doc_id, position FROM INNODB_FT_INDEX_TABLE 

OR

SELECT word,count(*) FROM INNODB_FT_INDEX_TABLE group by word; 

などを構築した後

これはかなりうまく説明

.... https://dev.mysql.com/doc/refman/5.6/en/innodb-ft-index-table-table.html

はここにクエリだ....

注:私はこれをテストしていませんが、私はOracで同様に行っていますル。

+0

これは、デフォルトでMYSQLは3文字未満のトークンを格納しないので、すべての単語が必要な場合は、その動作を変更する必要があります。 – markg

+0

ありがとうございます。残念ながら、これはInnoDBテーブルのためだけに機能します。インデックスはMyISAMテーブルの列にあります。そのタイプのインデックスがまだどこに保存されているのかわかりませんでした... – Benvorth