Mysql 基本多重性-获取多个数据
我有两张桌子,人和颜色 人们有id、姓名和颜色id(他们喜欢的颜色) 颜色有id和名称 喜欢一种颜色的人很容易获得数据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
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|
等等
这里是演示