有表a 表b表a的数据结构
id name
1 表a名称1
2 表a名称2
3 表a名称3表b的数据结构
id name aid
1 表b名称1 1
2 表b名称2 1
3 表b名称3 3
4 表b名称4 2
5 表b名称5 2
6 表b名称6 1
7 表b名称7 2
8 表b名称8 3
9 表b名称9 3其中表a的每条数据都是唯一的
表b中的aid关联表a的id现在我想根据表b的数据来显示成以下内容表a名称3 - 表b名称3,表b名称8,表b名称9
表a名称2 - 表b名称4,表b名称5,表b名称7
表a名称1 - 表b名称1,表b名称2,表b名称6排序的条件是根据表b的id倒序
id name
1 表a名称1
2 表a名称2
3 表a名称3表b的数据结构
id name aid
1 表b名称1 1
2 表b名称2 1
3 表b名称3 3
4 表b名称4 2
5 表b名称5 2
6 表b名称6 1
7 表b名称7 2
8 表b名称8 3
9 表b名称9 3其中表a的每条数据都是唯一的
表b中的aid关联表a的id现在我想根据表b的数据来显示成以下内容表a名称3 - 表b名称3,表b名称8,表b名称9
表a名称2 - 表b名称4,表b名称5,表b名称7
表a名称1 - 表b名称1,表b名称2,表b名称6排序的条件是根据表b的id倒序
form a inner join b on a.id=b.aid
group by a.name
form tt1 a inner join tt2 b on a.id=b.aid
group by a.name order by a.id desc
mysql> select * from a;
+------+----------+
| id | name |
+------+----------+
| 1 | 表a名称1 |
| 2 | 表a名称2 |
| 3 | 表a名称3 |
+------+----------+
3 rows in set (0.00 sec)mysql> select * from b;
+------+----------+------+
| id | name | aid |
+------+----------+------+
| 1 | 表b名称1 | 1 |
| 2 | 表b名称2 | 1 |
| 3 | 表b名称3 | 3 |
| 4 | 表b名称4 | 2 |
| 5 | 表b名称5 | 2 |
| 6 | 表b名称6 | 1 |
| 7 | 表b名称7 | 2 |
| 8 | 表b名称8 | 3 |
| 9 | 表b名称9 | 3 |
+------+----------+------+
9 rows in set (0.00 sec)mysql> select a.name,c.bname from a left join(
-> select group_concat(bb.name order by bb.name) bname,bb.aid
-> from a aa,b bb where aa.id=bb.aid group by bb.aid) c
-> on a.id=c.aid
-> order by a.id desc;
+----------+----------------------------+
| name | bname |
+----------+----------------------------+
| 表a名称3 | 表b名称3,表b名称8,表b名称9 |
| 表a名称2 | 表b名称4,表b名称5,表b名称7 |
| 表a名称1 | 表b名称1,表b名称2,表b名称6 |
+----------+----------------------------+
3 rows in set (0.00 sec)
select tt1.name,group_concat(tt2.name)
from tt1,tt2
where tt1.id=tt2.id
group by tt2.aid
order by a.id desc;
版主其实就是想知道group_concat(函数的用法)
select a.name,group_concat(b.name order by b.name)
form tt1 a left join tt2 b on a.id=b.aid
group by a.name order by a.id desc
这应该怎么写?select a.name,group_concat(b1.name)
form a inner join b b1 on a.id=b1.aid
where 5>(select count(*) from b where aid=a.aid and id<b1.id)
group by a.name
select a2.name,group_concat(b1.name)
from a a2
inner join
(select a.id,a.name,a.aid from b a left join b a1 on a.aid=a1.aid and a.id<=a1.id
having count(b.id)<=5
group by a.id,a.name,a.aid) b1
on a.id=b1.aid
form a t1,
(select * from b t2 where (select count(1) from b t3 where t3.aid=t2.aid and t3.id<t2.id)<5) t4
where t1.aid=t4.aid
group by a.name
from tt1,tt2
where tt1.id=tt2.id
group by tt2.aid
order by a.id desc;以这句为准,应该怎么改?
SELECT a.id,a.name,a.aid ,COUNT(b1.id),GROUP_CONCAT(b.XM),max(a1.name) FROM b a LEFT JOIN b b1
ON a.aid=b1.aid and a.id <=b1.id
left join a a1 on a1.id=a.aid
GROUP BY a.id,a.name,a.aid HAVING COUNT(b1.id)=5