group逗号分隔字段中的mysql count值

时间:2013-07-23 19:24:32

标签: mysql count

我有一个包含列的用户表: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

3 个答案:

答案 0 :(得分:1)

最佳解决方案:废弃此表设计并使用正确规范化的一次重建。然后一个简单的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

答案 1 :(得分:1)

我不知道为什么我违反了数据库规范化的基本原则......每个用户通常都有一个机制或最多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

答案 2 :(得分:0)

SELECT  COUNT(user_Id)
FROM    users, mechanics
WHERE   mechanics.id IN (users.mechanic_id)
相关问题