问题: 查找共同好友比较多的好友
表                 
           friend 
                用户ID| 好友ID
           id | uid |fuid|
            1      1      3
            2      1      4
            3      2      5
            3      2      5
          uid为表user的字段
我想获得和某用户(uid) 有  共同好友(fuid)  的  list<user>  并按照共同好友的多少排序

解决方案 »

  1.   

    select uid from friend f
      where f.fuid in
         (select fuid from friend where uid=1)
      order by (select count(*) from friend where fuid in
         (select fuid from friend where uid=1)) desc;
      

  2.   

    你上面的表是不可能存在的。。如果表中只有3个字段
    id | uid |fuid| 那么这3个字段的数据完全相同的情况是不可能存在的
      

  3.   

    2楼的语句报下面的错:
    2009-11-06 13:26:49,198 [http-8080-Processor20] ERROR [org.hibernate.hql.PARSER] - <AST>:0:0: unexpected AST node: query
    2009-11-06 13:26:49,214 [http-8080-Processor20] ERROR [500.jsp] - unexpected AST node: query [select uid from com.guami.entity.base.Friend f where f.fuid in(select fuid from com.guami.entity.base.Friend where uid=?) order by (select count(*) from com.guami.entity.base.Friend where fuid in(select fuid from com.guami.entity.base.Friend where uid=?)) desc]
    org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: query [select uid from com.guami.entity.base.Friend f where f.fuid in(select fuid from com.guami.entity.base.Friend where uid=?) order by (select count(*) from com.guami.entity.base.Friend where fuid in(select fuid from com.guami.entity.base.Friend where uid=?)) desc]
    是不是hql不支持这样order by 啊
      

  4.   

    你可以用本地sql来查询啊!这种比较复杂的需求hql都难实现。
      

  5.   

    请问高手门 这语句hql该怎么写啊
      

  6.   

    select b.uid,count(*)
    from friend a ,friend b
    where a.fuid=b.fuid 
    and b.uid=某用户
    and a.uid!=b.uid
    group by b.uid
    order by 2 desc
      

  7.   

    select a.uid  from friend a left join friend b
    on a.fuid=b.fuid and b.uid=1 and a.uid<>b.uid
    group by a.uid order by count(b.id) desc
      

  8.   

    用 left join 效率比较差。
    也没有必要用 left join,