首先分析你的问题:其中需要实现的是 hid、bzdate、username 都相同的记录只显示 bzdate 最新的一条(如果都相同何来最新?),只要三者其中一个不同就全部显示出来
看着那么花眼
$query="select d.name as ztname,h.*,b.*,m.realname from housecs h,dmcszt d,beizhu b,manager m where b.htype='".$htype."' and d.dm=h.zt and b.hid=h.id and b.username=m.id";if($username!='0000'){
$query=$query." and b.username='".$username."'";
}$query=$query." group by b.bzdate,b.hid,b.username order by b.bzdate,b.bztime desc limit $start,$pagesize";我觉得你的语句有问题
select b.id,b.username,b.bzdate from beizhu b group by b.id,b.username,b.bzdate

解决方案 »

  1.   

    你写的语句跟我写的语句是一样的,只是我是复合查询,一些字段的值需要在其他数据表做匹配,我直接把代码 copy 过来,没有进行简化。还是解决不了我遇到的问题。
      

  2.   

    表里面需要用到的字段有:hid、username、bzdate、bztime
    假设有如下记录:id    hid    username      bzdate         bztime
     1     1        1          2003-12-04     17:50:00
     2     1        1          2003-12-04     17:51:00
     3     1        2          2003-12-04     17:52:00
     4     1        1          2003-12-05     17:50:00
    则我需要显示出来的是 id 为 2、3、4 的记录,1 因为与 2 的 hid、username、bzdate 三个字段都相同,而 bztime 字段的时间比 2 靠前,所以只显示时间最新的 id 为 2 的记录
      

  3.   

    select hid,username,bzdate,max(bztime) from tablename group by hid,username,bzdate
      

  4.   

    我现在遇到的问题就是这样写得到的结果不是我想要的,我得到的只是显示出了 id 为 1、3 的记录,如果加多个 where username='1' 的条件则可以正常显示出 id 为 1、2、4 的记录,百思不得其解。
      

  5.   

    不可能吧
    我看你还是把自己所生成的SQL语句打印出来仔细核对一下为上
      

  6.   

    输出 SQL 语句还是看不出问题,因为 username 是否为 0000 的差别只是在原有的 SQL 后面加上 username 的匹配,用了下面这个判断,按理加不加都应该正常显示,但事实上确实加了才显示正常,不加的话 hid 和 username 都相同的情况下,无论 bzdate 相同与否都只显示一条记录,这与我想实现的输出有了差别:(if($username!='0000'){
    $query=$query." and beizhu.username='".$username."'";
    }