有三个表A, B, C,它们的关系是这样的
A表里有一字段为定单号Billid 例如数据库中存的数据如下:
ID Billid
1 123
2 456B表里也有一 字段也为定单号 Orderid 和 定单对应的商品PID号,例如数据库中存的数据如下:
定单号 Orderid 商品PID号
123 25
123 26
123 27C表里是字段为商品PID及商品名称Name,例如数据库中存的数据如下:
PID Name
25 手机
25 电脑
27 汽车我想要实现的功能是:通过A表中的定单号(SQL 条件就是`A`.Billd=`B`.Orderid),查找到B表中的商品PID,再通过B表的商品PID,到C表中去查找商品的名称。
但是这一个定单号可能会对应很多条商品ID(见上面,B表的数据),但是我只想通过SQL语句,让它返回一条数据,就像这样的形式:
定单号 商品ID 商品名称
123 25,26,27 手机,电脑,汽车
而不是有重复的数据,这样的形式:
定单号 商品ID 商品名称
123 25 手机
123 26 电脑
123 27 汽车
A表里有一字段为定单号Billid 例如数据库中存的数据如下:
ID Billid
1 123
2 456B表里也有一 字段也为定单号 Orderid 和 定单对应的商品PID号,例如数据库中存的数据如下:
定单号 Orderid 商品PID号
123 25
123 26
123 27C表里是字段为商品PID及商品名称Name,例如数据库中存的数据如下:
PID Name
25 手机
25 电脑
27 汽车我想要实现的功能是:通过A表中的定单号(SQL 条件就是`A`.Billd=`B`.Orderid),查找到B表中的商品PID,再通过B表的商品PID,到C表中去查找商品的名称。
但是这一个定单号可能会对应很多条商品ID(见上面,B表的数据),但是我只想通过SQL语句,让它返回一条数据,就像这样的形式:
定单号 商品ID 商品名称
123 25,26,27 手机,电脑,汽车
而不是有重复的数据,这样的形式:
定单号 商品ID 商品名称
123 25 手机
123 26 电脑
123 27 汽车
a.Billid,
GROUP_CONCAT( b.PID SEPARATOR ',' ) AS PIDLIST,
GROUP_CONCAT( c.NAME SEPARATOR ',' ) AS PNAMELIST
FROM
a,b,c
WHERE
( a.Billid=b.Orderid AND b.PID=c.PID )
GROUP BY
a.Billid
这样就行了。GROUP_CONCAT是mysql的函数。直接调用就可以了。