我在MYSQL数据库中有两个表,A和B
A表有字段:a_id, a_name, a_description(a_id是唯一值,自动递增的)
B表有字段:b_id, a_id, b_name, b_description(b_id是唯一值,自动递增的,a_id是有重复的)我在PHP文件中调用A表数据,并用while (!$a->EOF)...$a->MoveNext();将A表的所有行的记录都显示在我做的一个页面现在,我需要在每行记录的旁边显示相对应的b_name字段值,
于是我用LEFT JOIN " . B . " b ON (b.a_id = a.a_id)这样,b_name字段值是显示在旁边了,可是页面总行数一下子增多了,
因为原本总行数就是a_id的行数,现在有了重复的a_id行,这是由于a_id在B表中不是唯一值。我只想按a_id的行数显示,就是一个a_id一行,在那行旁边显示对应的b_name,该如何做到呢?

解决方案 »

  1.   

    我觉得LZ这个问题本身就有问题。
    LZ也说了在B表中的a_id是重复的。
    那就表明对于唯一的a_id,有多个对应a_id的b_name。请问要怎么显示?是只显示第一个对应的b_name还是全部都显示?是连起来显示还是用<br>格式起来?这都是问题。
    只要选择b_name的SQL命令与之前选取A表的a_id的SQL命令在同一个while循环下,应该就不会重复了。
      

  2.   

    这点忘说了,虽然a_id在B表中记录是可以重复的,但只要相同的a_id对应的b_name是相同的,所以不存在多个b_name问题以下是两表详细举例:A表
    a_id   |   a_name   |   a_description
    1     |     name     |     description
    2     |     name     |     description
    3     |     name     |     descriptionB表
    b_id   |   a_id   |   b_name   |   b_description
    1     |     2     |     name a2     |     description
    2     |     2     |     name a2     |     description
    3     |     1     |     name a1     |     description
    4     |     3     |     name a3     |     description我要显示的页面表格效果
    a_id   |   a_name   |   a_description   |   b_name
    1     |     name      |     description     |     name a1
    2     |     name      |     description     |     name a2
    3     |     name      |     description     |     name a3这个是不是不能用DISTINCT?如果用GROUP_CONCAT()能不能具体写一下代码呢?
      

  3.   

    select a.* , b.b_name from A left join B on A.a_id=b.a_id group by b.a_id
      

  4.   

    太谢谢了
    原来关键就是那个group by b.a_id
    之前没加这个,就产生a_id重复行,一加这句就没有重复了我原本还以为group by只是排序的,没什么重要的。
    能不能问一下,这是什么原因?