0

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

4

3 回答 3

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
于 2013-07-23T19:28:17.950 回答
1

我不知道为什么我违反了数据库规范化的基本原则......每个用户通常有一个机械师或最多 2 或 3 个,所以这就是我决定将数据存储在 users 表中的原因。

我找到了基于@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
于 2013-07-23T20:11:04.830 回答
0
SELECT  COUNT(user_Id)
FROM    users, mechanics
WHERE   mechanics.id IN (users.mechanic_id)
于 2013-07-23T19:31:03.010 回答