[英]group mysql count values in comma separated field
我有一个包含列的用户表: user_id, mechanic_id
和
带有id
力学表
我想算一下有多少用户拥有相同的机制。
用户表
+-------------------------+
| user_Id mechanic_id |
+-------------------------+
| 1 1,2 |
| 2 2,1 |
| 3 2,1,8,16 |
| 4 1,16,3 |
+-------------------------+
力学表
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
...
$ id1的计数是:4
$ id2的计数是:3
$ id3的计数是:1
$ id8的计数是:1
$ id16的计数是:2
最佳解决方案:废弃此表设计并使用适当规范化的一次重建。 然后一个简单的join + group by + count查询就可以了。
最糟糕的解决方案:使用MySQL的find_in_set()函数:
SELECT mechanics.id, COUNT(user_ID)
FROM mechanics
LEFT JOIN users ON (FIND_IN_SET(mechanics.id, users.mechanic_id) > 0)
GROUP BY mechanics.id
我不知道为什么我违反了数据库规范化的基本原则......每个用户通常都有一个机制或最多2或3,这就是我决定将数据存储在用户表中的原因。
我找到了基于@Marc B的解决方案:
SELECT count(*) FROM users a
INNER JOIN mechanics b
ON (FIND_IN_SET(b.id, a.mechanic_id) > 0)
WHERE b.id = '{$id}'
group by b.id
SELECT COUNT(user_Id)
FROM users, mechanics
WHERE mechanics.id IN (users.mechanic_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.