繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM