1

下の表があります。

CREATE TABLE IF NOT EXISTS `product`
(
    `id` int(11) NOT NULL,
    `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
    `description` varchar(200) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `product` (`id`, `name`, `description`) VALUES
(1, 'Samsung', "this is samsung product description from samsung"),
(2, 'Mobile', "Samsung galaxy note2 from samsung store"),
(3, 'Smartphone', "Samsung");

product今、私は以下のように結果を生成するテーブルを照会したいと考えています。

ID   Name       WordCount
1   Samsung        3
2   Mobile         2
3   Smartphone     1

MySQL選択クエリでこの単語の出現をカウントするにはどうすればよいですか。

編集

私の主張を明確にしておらず申し訳ありません。

しかし、ここにあります。

searchすべての行から言葉Samsungを出し、名前だけでなく説明からもその出現を数えたいと思います。

4

1 に答える 1

3

数時間のグーグルとデバッグの後、最終的に解決しました。

このタスクを達成するために、char_length と replace の組み合わせを使用しました。

最終的には以下のようになります。

select  *,(
    (char_length(name) - char_length(replace(name,'sam',''))) +
    (char_length(description) - char_length(replace(description,'sam','')))
) / char_length('sam') as SearchCount
from
    product
order by
    SearchCount desc

上記のクエリはCASE SENSITIVEですが、心配しないでください。CASE-INSESITIVEでも解決しました。以下のクエリを参照してください。

select  *,
(
    (char_length(name) - char_length(replace(LOWER(name),LOWER('Sam'),''))) +
    (char_length(description) - 
    char_length(replace(LOWER(description),LOWER('Sam'),'')))
) / char_length('sam') as SearchCount
from
    product
order by
    SearchCount desc

このクエリを作成した後は、WHEREそれを機能させるための句を追加するだけです。

これが他の人々にも役立つことを願っています。

助けてくれてありがとう(回答して削除してコメントしたすべての人。)

于 2013-04-11T11:59:45.433 に答える