テーブルに含まれている文字を探して、カウントしたいと考えています。
例えば 2つのテーブルがあり
テーブル1: TEST1
項目: KOUMOKU1
テーブル2: TEST2
項目: KOUMOKU1 KOUMOKU2 KOUMOKU3
例えばテーブル1の KOUMOKU1 に
一行目:りんごは果物である
二行目:りんごは果物で赤色をしている
三行目以降:・・・・・・・
という文字データが入っているとします。
テーブル2の一行目には
KOUMOKU1に りんご KOUMOKU2に 果物 という文字が入っているのですが
SQL命令を実行すると
KOUMOKU1のりんごとKOUMOKU2の果物が入っている文字列がテーブル1のKOUMOKU1にいくつあるのか?というのをカウントして この場合は テーブル2の一行目のKOUMOKU3に
りんご 果物 2 という数字が入ります。
上記のような命令をDBで行いたいのですがそのような事は可能でしょうか?
こんなんでどうでしょう。
mysql> select * from test1; +--------------------------------------------------------------------+ | koumoku1 | +--------------------------------------------------------------------+ | りんごは果物で赤色をしている | | りんごは赤色をしている | | みかんは果物である | | みかんは果物でオレンジ色をしている | | オレンジ色のみかんが売られている | | オレンジ色のみかんがりんごと共に売られている | | りんごは果物である | +--------------------------------------------------------------------+ 7 rows in set (0.00 sec) mysql> select * from test2; +-----------+-----------------+----------+ | koumoku1 | koumoku2 | koumoku3 | +-----------+-----------------+----------+ | りんご | 果物 | 0 | | みかん | オレンジ色 | 0 | +-----------+-----------------+----------+ 2 rows in set (0.00 sec) mysql> UPDATE test2 SET koumoku3 = ( -> SELECT COUNT(*) FROM test1 -> WHERE test1.koumoku1 LIKE CONCAT('%', test2.koumoku1, '%') -> AND test1.koumoku1 LIKE CONCAT('%', test2.koumoku2, '%') -> ) -> ; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from test2; +-----------+-----------------+----------+ | koumoku1 | koumoku2 | koumoku3 | +-----------+-----------------+----------+ | りんご | 果物 | 2 | | みかん | オレンジ色 | 3 | +-----------+-----------------+----------+ 2 rows in set (0.00 sec)
とても丁寧にご回答ありがとうございます^^。