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