我有一张桌子,我为他的祖先的每一个记录保存
+----+------------+
| id | ancestors |
+----+------------+
| 1 | ,1, |
| 2 | ,2, |
| 3 | ,3,1, |
| 4 | ,4,2, |
| 5 | ,5,3,1, |
| 6 | ,6,4,2, |
| 7 | ,7,5,3,1, |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
如何按照id这种方式分组,而group by ','id','不是group by id得到这样的结果:
+----+------------+
| id | count |
+----+------------+
| 1 | 4 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 5 | 2 |
| 6 | 1 |
| 7 | 1 |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
我的要求是找到id整列中的计数ancestors.
SELECT m1.id, COUNT(*)
FROM mytable m1
JOIN mytable m2
ON FIND_IN_SET(m1.id, m2.ancestors)
GROUP BY
m1.id
Run Code Online (Sandbox Code Playgroud)
请注意,它不是一种有效的方法,随着数据库变大,它会变慢.
您的要求似乎是在整个列中count找到idancestors找到 的。
因此,在依赖子查询中使用COUNT应该没问题,如下所示:
SELECT a.id,
(SELECT count(*) FROM ancestors_table t where t.ancestors LIKE CONCAT('%,',a.id,',%') )
FROM ancestors_table a;
Run Code Online (Sandbox Code Playgroud)
在这里使用 SQLFiddle 。
更新:修复了两位数或更多数字的问题。1 将仅匹配 1。而不是 10、11 等。这是可能的,因为您的列附加,在每个值周围。