MySQL:从表 'a.total' 的列 'a.name' 中的值 'b.content' 的计数中填充列 'b'

标签 mysql count

我正在尝试用 a.nameb.content 中出现的次数填充 a.total 列。

       a                       b
+--------------+    +----------------------+
| name | total |    | content              |
+------+-------+    +----------------------+
| foo  |     3 |    | hello bar            |
| bar  |     4 |    | hola foofoo          |
+--------------+    | nihao foo, bye bar   |
                    | et bar se bar        |
                    +----------------------+

我尝试了以下命令:

UPDATE a SET a.total = (SELECT COUNT(*) FROM b WHERE b.content LIKE CONCAT('%', a.name, '%') );

但我明白了:

Query OK, 0 rows affected (0.16 sec)
Rows matched: 4321  Changed: 0  Warnings: 0" with my command

这个命令有什么问题?我怎样才能考虑同一 content 行中所有出现的 foobar

最佳答案

Count the number of occurrences of a string in a VARCHAR field?显示如何计算列中子字符串的出现次数。然后,您可以将它们相加以获得所有行的总计。

UPDATE a
SET a.total = (
    SELECT SUM((CHAR_LENGTH(b.content) - CHAR_LENGTH(REPLACE(b.content, a.name, ''))) / CHAR_LENGTH(a.name))
    FROM b
    WHERE b.content LIKE CONCAT('%', a.name, '%'))

DEMO

关于MySQL:从表 'a.total' 的列 'a.name' 中的值 'b.content' 的计数中填充列 'b',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507334/

相关文章:

php - 使用字符串 INTO 语句构建 MySQL 查询

mysql - 扩展的 ASCII 字符在 MySQL 中显示为垃圾 通过 perl 插入数据库

mysql - 正常选择比 count(*) 快

mysql - 连接两个表然后分组

c# - LINQ 获取 List<List<string>> 中的不同计数/排序

mysql - 浏览数据库记录的最佳且最快的方法

mysql - 如何从 10 个随机行中选择第一行

MySQL - 跨表计数

mysql - 如何删除未连接的 MySQL 用户?

mysql - 将 Count 与 Count Distinct 和 Group By 一起使用