假设我有一张表A
两个字段ID date1 2009-10-10 11:11:11
2 2009-10-10 11:11:13
3 2009-10-10 11:11:15
4 2009-10-10 11:11:17还有一张表B
三个字段ID A_id date1 1 2009-10-10 11:11:12
2 1 2009-10-10 11:11:14
3 2 2009-10-10 11:11:16现在我每往表A添加一条数据,date按照添加时间录入
每当我针对表A的一条数据回复下,就存入表B,时间按录入时间,也就是表B可能有针对A某条数据的数据,也可能没有现在我想查询出来这样的结果
显示a的ID根据在表B时间倒序顺序排列,如果在表b没有数据,就按照A自己的时间算4 //最后时间为本身的11:11:17
2 //最后时间为表B的11:11:16
3 //最后时间为本身的11:11:15
1 //最后时间为表B的最新记录11:11:14
表达不是很清晰,希望能帮我 
问题补充:可以理解成论坛那样的排列,最新回复了放在最上面,没有回复按时间排列,但是我不能改动数据库

解决方案 »

  1.   

    select 
      id,
      isnull(b.`date`,a.`date`) as `date`
    from
      a
    left join 
      b 
    on
      a.id=b.a_id
    and
      not exists(select 1 from b t where t.a_id=b.a_id and t.`date`>b.`date`)
    order by
      `date` desc
      

  2.   

    mysql> select * from a;
    +------+---------------------+
    | id   | date                |
    +------+---------------------+
    |    1 | 2009-10-10 11:11:11 |
    |    2 | 2009-10-10 11:11:13 |
    |    3 | 2009-10-10 11:11:15 |
    |    4 | 2009-10-10 11:11:17 |
    +------+---------------------+
    4 rows in set (0.00 sec)mysql> select * from b;
    +------+------+---------------------+
    | id   | A_id | date                |
    +------+------+---------------------+
    |    1 |    1 | 2009-10-10 11:11:12 |
    |    2 |    1 | 2009-10-10 11:11:14 |
    |    3 |    2 | 2009-10-10 11:11:16 |
    +------+------+---------------------+
    3 rows in set (0.00 sec)mysql> select a.id,max(COALESCE(b.date,a.date))
        -> from a left join b on a.id=b.a_id
        -> group by a.id
        -> order by 2 desc;
    +------+------------------------------+
    | id   | max(COALESCE(b.date,a.date)) |
    +------+------------------------------+
    |    4 | 2009-10-10 11:11:17          |
    |    2 | 2009-10-10 11:11:16          |
    |    3 | 2009-10-10 11:11:15          |
    |    1 | 2009-10-10 11:11:14          |
    +------+------------------------------+
    4 rows in set (0.00 sec)mysql>
      

  3.   

    另外不建议用 date 这个保留字为字段名。 尽量避免。
      

  4.   

    您能给我解释下
    mysql> select a.id,max(COALESCE(b.date,a.date))
        -> from a left join b on a.id=b.a_id
        -> group by a.id
        -> order by 2 desc;
    这个么? 谢谢你了 初学