表goods: gid | name 
  1 xde
  2 dfdd
  3 东方古国风格
表glist: lid | gid | subname | displayorder
  1 1 三三四四 2
  2 1 扫扫地 12  
  3 2 日方非法 10
  4 2 到噶多个 1
我现在想取出glist表中的lid为2,3两项。
但是SELECT g . * , f . * FROM goods g LEFT JOIN glist f ON g.gid = f.gid ORDER BY g.displayorder DESC limit 2 这个sql取出的结果是错误的。按照goods中的gid升序 取出两条 同时也取出在glist中属于相应gid的一条(取displayorder值最大的一个)
结果应为goods中的1,2 同时也取出glist中的2,3

解决方案 »

  1.   

    glist.lid in (2,3)这与关联无关!此处个人关联只是为了解决同时开列两表的数据
      

  2.   

    SELECT a.gid,max(b.displayorder) FROM goods a ,glist b WHERE a.gid=b.gid group by b.gid
      

  3.   

    displayorder的数值改变了呢?我的意思是去displayorder值大的。
      

  4.   

    可以这么写select a.*,max(b.displayorder),b.subname from goods as a left join glist as b on a.gid=b.gid  group by a.gid
    分组查询displayorder字段最大值
      

  5.   

    SELECT g . * , f . * FROM goods g LEFT JOIN glist f ON g.gid = f.gid ORDER BY f.displayorder DESC limit 2你的sql有问题,不是g,是f。但是这样不能满足你以下要求
    “按照goods中的gid升序 取出两条 同时也取出在glist中属于相应gid的一条(取displayorder值最大的一个)
    结果应为goods中的1,2 同时也取出glist中的2,3”楼上也是错的,虽然max(b.displayorder)取出来是对的,但是b.subname不对。正确的应该是:
    select * from (select g.gid, g.name, f.lid,f.subname,f.displayorder from goods g left join glist f on g.gid=f.gid order by g.gid ASC, f.displayorder DESC) h group by h.gid LIMIT 2