有表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倒序

解决方案 »

  1.   

    select a.name,group_concat(b.name)
    form a inner join b on a.id=b.aid
    group by a.name
      

  2.   

    select a.name,group_concat(b.name)
    form tt1 a inner join tt2 b on a.id=b.aid
    group by a.name order by a.id desc
      

  3.   


    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)
      

  4.   


    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(函数的用法)
      

  5.   

    or
    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
      

  6.   

    如果我只要表b中最新的5条数据时
    这应该怎么写?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
      

  7.   

    假设每个AID最新5条记录:
    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
      

  8.   

    select concat(a.name,'--',group_concat(t4.name order by  t4.name)) as result 
    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
      

  9.   

    select tt1.name,group_concat(tt2.name) 
    from tt1,tt2 
    where tt1.id=tt2.id
    group by tt2.aid
    order by a.id desc;以这句为准,应该怎么改?
      

  10.   

    or
    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