0

これは私のSQLクエリです:

SELECT filename  
FROM video   
WHERE MATCH (title, description) AGAINST  
('sports' IN BOOLEAN MODE); 

titleおよびdescriptionフィールドで単語を検索していますsports(大文字と小文字は区別されません)

ここで、単語がこれらのフィールドに出現した回数を数えたいと思いscoreますが、独立しています...つまり、n_title=2、n_description=1.

私はすでにこのクエリを試しましたが、うまくいきます...

SELECT filename,  
ROUND ((LENGTH(description) - LENGTH( REPLACE ( description, "sports", ""))) / LENGTH("sports")) AS count  
FROM video

しかし、大文字と小文字を区別するわけではなく、入力sportsしても結果が得られません。これは、データベースでは「Sports」(大文字の「S」) として「保存」されているためです。

今私の問題は、この2つのクエリを「連結」して、それらを1つとして使用する方法です。そのため、大文字と小文字を区別しない単語を検索し、各フィールドの出現回数をカウントすることもできます。

4

1 に答える 1

1

これはあなたが探しているものです(フィドル):

SELECT
    filename,  
    (
      CHAR_LENGTH(title)
      - CHAR_LENGTH( REPLACE(LOWER(title), "sports", "") )
    ) / CHAR_LENGTH("sports") AS cnt_title,
    (
      CHAR_LENGTH(description)
      - CHAR_LENGTH( REPLACE(LOWER(description), "sports", ""))
    ) / CHAR_LENGTH("sports") AS cnt_desc

FROM video
WHERE MATCH (title, description) AGAINST ('sports' IN BOOLEAN MODE); 

REPLACE定義上、大文字と小文字が区別されます。トリックは、文字列の小文字バージョンを処理することです。また、のCHAR_LENGTH代わりに使用する必要がありLENGTHます。前者は文字をカウントしますが、後者はバイトをカウントします (そして UTF8 を使用しています)。

于 2013-05-24T23:59:56.617 に答える