【发布时间】:2020-01-01 06:17:54
【问题描述】:
根据官方文档,FIND_IN_SET 返回逗号分隔列表中第一次出现的可用字符串的位置。但我想获取逗号分隔列表中可用字符串的计数。
例如:
SELECT id, name, FIND_IN_SET(id, '1,1,2,3,4,4,5,6,7,7,7') as num FROM users;
返回如下结果
+----+---------------+
| id | name | num |
+----+---------------+
| 1 | Jack | 1 |
| 2 | Alex | 3 |
| 3 | John | 4 |
| 4 | Brett | 5 |
| 5 | Keith | 7 |
| 6 | Richard | 8 |
| 7 | Kent | 9 |
+----+---------------+
SQL 小提琴:http://sqlfiddle.com/#!9/9eeacb/2
但我想要与表的 id 匹配的 id 计数。因此,预期的输出应该如下所示。
SELECT id, name, SOME_FUNCTION(id, '1,1,2,3,4,4,5,6,7,7,7') as num FROM users;
+----+---------------+
| id | name | num |
+----+---------------+
| 1 | Jack | 2 |
| 2 | Alex | 1 |
| 3 | John | 1 |
| 4 | Brett | 2 |
| 5 | Keith | 1 |
| 6 | Richard | 1 |
| 7 | Kent | 3 |
+----+---------------+
【问题讨论】:
-
如何生成逗号分隔的
id值列表? -
这是 PHP 变量以编程方式出现。
-
那么为什么不在 PHP 中使用
array_count_values计算呢? -
我不想遍历所有记录。这只是一个有 5-7 条记录的示例。我在数据库中有 1000 多条记录
-
我还是不明白为什么你不能只计算 PHP 中字符串中的值。你能举一个更详细的例子来说明你想要实现的目标吗?