zerkms 的解决方案有效,这一点毫无疑问。但是正如 Steve Wellens 指出的那样,您的问题是由不正确的数据库模式造成的。一个列中不应有多个值,因为它违反了第一条正常定律。相反,您应该至少制作两张桌子。例如,假设您有 成员,他们拥有 animals:
table member (member_id, member_name)
table member_animal (member_id, animal_name)
更好的是:由于许多用户可以拥有相同类型的动物,您应该创建 3 个表:
table member (member_id, member_name)
table animal (animal_id, animal_name)
table member_animal (member_id, animal_id)
您可以像这样填充您的表格,例如:
member (1, 'Tomas')
member (2, 'Vincent')
animal (1, 'cat')
animal (2, 'dog')
animal (3, 'turtle')
member_animal (1, 1)
member_animal (1, 3)
member_animal (2, 2)
member_animal (2, 3)
而且,为了回答你最初的问题,如果你想知道每个用户有多少只动物,你会这样做:
SELECT member_id, COUNT(*) AS num_animals
FROM member
INNER JOIN member_animal
USING (member_id)
INNER JOIN animal
USING (animal_id)
GROUP BY member_id;