及联的view有以下几个字段:作者,作者用户创建时间,发表文章的题目,发布状态(0普通,1精华)两种
      我希望按作者创建时间倒序列10个不同作者发布的文章,每个作者列一条,语句是
     select userName,article_status,create_time,title  from user_article group by userName  order by  create_time desc limit 0,10
     现在有个需求,就是如果该作者有状态为1的文章,则列该文章,我修改了语句       select userName,max(article_status) as maxStatus,create_time,title  from user_article group by userName  order by  create_time desc limit 0,10
     返回结果 maxStatus 是为1了,但是title还是原来不加maxStatus的title,而不是真正status 为1的 title,
     我的问题是order by 是给分组之间排序,那group by 后的每个分组内,如何按status排序呢

解决方案 »

  1.   

       view 名userArticle,字段有
       userName,create_time,title,article_status,
       数据例子:
        zhangsan,2008-3-23,putongtitle,0
        zhangsan,208-3-23,jinghuatitle,1
        我用select userName,max(article_status) as maxStatus,create_time,title  from user_article group by userName  order by  create_time desc limit 0,10 
        我希望列出的记录是zhangsan,2008-3-23,jinghuatitle,1,
       但实际上列出的是zhangsan,2008-3-23,putongtitle,1
      

  2.   


    select *
    from 
    (
      select * 
      from user_article t
      where article_status=1 
      and not exists(
                     select 1 
                     from user_article 
                     where userName=t.userName 
                     and article_status=1 
                     and create_time>t.create_time
                     )
    ) tt
    order by  create_time desc limit 0,10 
      

  3.   

    楼上的,我问题没讲清楚,抱歉
    我需要的的是如果这个作者有status为1的就列,如果没有还是列一条status为0的
    比如lisi
         他只有这一篇文章
        
    lisi ,208-3-22,putong,0
    因为没有status为1的文章,所以应该列出  lisi,2008-3-22,putong,0的文章
      

  4.   

    select userName,article_status ,create_time,title  from user_article group by userName ,article_status order by  create_time desc limit 0,20
    这样每个userName最多有两个分组,再程序处理一下,有status为1的取1的分组,否则取0的
      

  5.   

    没有环境测试,试试--
    select userName,article_status ,create_time,title  
    from user_article t
    where article_status=(case when exists(select 1 from user_article where userName=t.userName and article_status=1) then 1 else 0 end)
    group by userName ,article_status 
    order by  create_time desc limit 0,10 
      

  6.   

    select a.username, c.article_status, c.title,c.create_time from user_article a left join (select username, article_status,title, max(create_time) as create_time from (select username,status,title,create_time from user_article order by article_status desc) b group by username)c on a.username=c.username group by a.username order by c.create_time desc limit 0,10
      

  7.   

    select   a.username,   c.article_status,   c.title,c.create_time   from   user_article   a   left   join   (select   username,   article_status,title,   max(create_time)   as   create_time   from   (select   username,status,title,create_time   from   user_article   order   by   article_status   desc)   b   group   by   username) c   on   a.username=c.username   group   by   a.username   order   by   c.create_time   desc   limit   0,10