Mysql 基本多重性-获取多个数据

Mysql 基本多重性-获取多个数据,mysql,Mysql,我有两张桌子,人和颜色 人们有id、姓名和颜色id(他们喜欢的颜色) 颜色有id和名称 喜欢一种颜色的人很容易获得数据 Select People.name as Pname, Colors.name as Cname From People, Colors Where (People.colorId = Colors.id AND People.id = 1) 但是,我该如何处理一些喜欢两种或更多颜色的人呢 您希望将分组依据与具有子句一起使用: Select People.name as

我有两张桌子,人和颜色

人们有id、姓名和颜色id(他们喜欢的颜色) 颜色有id和名称

喜欢一种颜色的人很容易获得数据

Select People.name as Pname, Colors.name as Cname 
From People, Colors
Where (People.colorId = Colors.id AND People.id = 1)

但是,我该如何处理一些喜欢两种或更多颜色的人呢

您希望将
分组依据
具有
子句一起使用:

Select People.name as Pname, group_concat(Colors.name) as Cnames
From People join
     Colors
     on People.colorId = Colors.id
group by people.id
having count(*) > 1;
但是,原始查询仅获取id为1的人员的颜色。这与生产多少种颜色无关

Select 
  People.name as Pname, GROUP_CONCAT(Colors.name) as Cname, COUNT(Colors.id) as total_like
From 
  People INNER JOIN Colors ON (People.colorId = Colors.id)
Having 
   total_like > 2

另外,我不测试

IMHO首先您需要更改模式,以便能够正确存储和轻松查询此类数据。您需要将
person-color
关系移动到另一个(透视/多对多)表

提议的模式

CREATE TABLE people
    (`id` int, `name` varchar(32));
CREATE TABLE colors
    (`id` int, `name` varchar(32));
CREATE TABLE person_color
    (`person_id` int, `color_id` int);
现在您可以查询数据了。得到一个人喜欢的颜色

SELECT p.name p_name, c.name c_name 
  FROM person_color pc JOIN people p
    ON pc.person_id = p.id JOIN colors c
    ON pc.color_id = c.id 
 WHERE p.id = 1
 ORDER BY c.id
样本输出:

| P_NAME | C_NAME | -------------------- | Person1 | black | | Person1 | red | | Person1 | blue | | P_NAME | HOW_MANY_COLORS | ----------------------------- | Person1 | 3 | | P_NAME | COLORS | ---------------------------- | Person1 | black,blue,red | | P_NAME | ----------- | Person1 | 样本输出:

| P_NAME | C_NAME | -------------------- | Person1 | black | | Person1 | red | | Person1 | blue | | P_NAME | HOW_MANY_COLORS | ----------------------------- | Person1 | 3 | | P_NAME | COLORS | ---------------------------- | Person1 | black,blue,red | | P_NAME | ----------- | Person1 | 样本输出:

| P_NAME | C_NAME | -------------------- | Person1 | black | | Person1 | red | | Person1 | blue | | P_NAME | HOW_MANY_COLORS | ----------------------------- | Person1 | 3 | | P_NAME | COLORS | ---------------------------- | Person1 | black,blue,red | | P_NAME | ----------- | Person1 | 样本输出:

| P_NAME | C_NAME | -------------------- | Person1 | black | | Person1 | red | | Person1 | blue | | P_NAME | HOW_MANY_COLORS | ----------------------------- | Person1 | 3 | | P_NAME | COLORS | ---------------------------- | Person1 | black,blue,red | | P_NAME | ----------- | Person1 | |P_名称| ----------- |人1| 等等

这里是演示