$sql = 'SELECT e.*,ac.* '.
       'FROM ' .$GLOBALS['ecs']->table('sell'). ' AS e '.
       'LEFT JOIN ' .$GLOBALS['ecs']->table('sell_message'). ' AS ac ON ac.sell_id = e.sell_id '.
       'WHERE 1 ' .$where.
       ' group by ac.sell_id '. 
       ' ORDER by '.$filter['sort_by'].' '.$filter['sort_order'];
这段语句可以正常查找出我需要的内容,但是现在得问题是,我想按照 table('sell_message')中的字段is_open的值是1的数量多少也就是is_open=1的数量多少排序!排序!
求帮助解答,谢谢!

解决方案 »

  1.   

     ' group by ac.sell_id '. 
    换成 group by ac.is_open
    试试
      

  2.   

    is_open 不是用来表示状态的么,这个多少是个什么意思?
      

  3.   


    table('sell_message'),是用来记录信息回复的的表,is_open=1,表示这条回复就显示,=0就不显示,每个信息有N条记录,现在就是要按照每条信息新回复(也就是is_open=0)数量的多少来排序
      

  4.   

    不知道你的数据组织,你可试一下这样排序
    order by sum(if(ac.is_open=1,1,0))
    不会有语法错,会有结果,但不一定符合你的需要
      

  5.   

    这条语句我也不会 不过我遇到这样的问题会这样做:先查sell_message表,按照信息字段分组并按照你的这个要求进行排序得到一个排序后的数组然后再去sell表里查询并用order by field来排序
    最近网站上数据越来越多 联表查询很吃力 我全换成这种了.. 用PHP来分析第一个查询结果,组合成字符串来进行第二次查询.  目前载入速度提高了很多搭车求问这样做会引起其他问题吗?@xuzuning
      

  6.   

    这是什么写法?  好神奇的样子。求解释!!!!if(ac.is_open=1,1,0)就是说如果ac.is_open=1这个值就是1,否则就是0,所以再加上sum就是统计ac.is_open=1的个数,再加上你有group by ac.sell_id,所以就是对每个sell_id,统计ac.is_open=1的行数,然后再按照这个行数排序