SELECT m.MyFavesID,m.SiteUser,p.PhotoID,p.CatID,p.PhotoTitle,p.PhotoURL,p.PublishTime FROM `my_faves` m ,`category` c,`photo` p WHERE m.SiteUser = c.UserName AND c.CatID=p.CatID AND m.UserID ='8' AND p.PhotoID=(SELECT MAX(PhotoID) FROM photo) GROUP BY m.SiteUser ORDER BY p.PhotoID DESC

解决方案 »

  1.   

    to alexzhang00(三角猫(sjcatsoft)) 不可以用子查询
    版本是4.0.*
      

  2.   

    去掉 HAVING MAX(p.PhotoID)=p.PhotoID ORDER BY p.PhotoID DESC 
    得到
    MyFavesID  SiteUser  PhotoID  CatID  PhotoTitle  PhotoURL  PublishTime  
    4 ken 113 28   uapply.gif 1094467194 
    并无114SELECT m.MyFavesID, m.SiteUser, max(p.PhotoID), p.CatID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM  `my_faves` m,  `category` c,  `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID =  '8'
    GROUP  BY m.SiteUser

    MyFavesID  SiteUser  max( p.PhotoID )  CatID  PhotoTitle  PhotoURL  PublishTime  
    4 ken 114 28   uapply.gif 1094467194 应该是你要的结果,再想想
      

  3.   

    刚有个朋友也这么写,不行的。如果增加用户所属于分类,在分类中增加数据,得到的结果又不是114max(p.PhotoID)显示的是最大,有错
    但是其他数据却不是p.PhotoID所属的值图
    http://hrcn.cn/tmp/2.bmp
    http://hrcn.cn/tmp/3.bmp
    數據
    http://hrcn.cn/tmp/sql.txt
      

  4.   

    max(p.PhotoID)显示的是最大,沒有错
    但是其他数据却不是p.PhotoID所属的值
      

  5.   

    mysql不支持语句嵌套,如果是在postgresql等其它数据库就可以用下面的解决SELECT m.userid, m.SiteUser, c.CatID, p.PhotoID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM `my_faves` m, `category` c, `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID = '8' and p.PhotoID=(select max(photoid) from photo)group by m.siteuser mysql只能分两步走,
    一、查出m.siteuser对应的各个最大id
    SELECT max(p.Photoid) as pid FROM `my_faves` m ,`category` c,`photo` p WHERE m.SiteUser = c.UserName AND c.CatID=p.CatID AND m.UserID ='8' GROUP BY m.SiteUser二、一个for循环,查出你想要的值 
    SELECT m.userid, m.SiteUser, c.CatID, p.PhotoID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM `my_faves` m, `category` c, `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID = '8' and p.PhotoID=pid 
      

  6.   

    不分语句查询
    如果分的话那就是2*N vs 1
      

  7.   

    to  52juanjuan(Fibona)用union麻烦,要多打几个字母重要的是我觉得那sql语句没有错,同时query的结果令我郁闷!
      

  8.   

    怎么不考虑用left join 呢?
      

  9.   

    union起码也要做两次查询,才能得到我要的数据。
    1.取得当前页面列表需要显示的数据id,即MyFavesID。
    2.做循环,得到数组sql语句,在implode(',',$array)再查询   ,得到所要的数据还不麻烦?
    另外,我很郁闷的是
    SELECT m.MyFavesID,m.SiteUser,p.PhotoID,p.CatID,p.PhotoTitle,p.PhotoURL,p.PublishTime FROM `my_faves` m ,`category` c,`photo` p WHERE m.SiteUser = c.UserName AND c.CatID=p.CatID AND m.UserID ='8' GROUP BY m.SiteUser HAVING MAX(p.PhotoID)=p.PhotoID ORDER BY p.PhotoID DESC 错了吗?到底错在那里?做相关的测试的时候,得到的数据显示很奇怪!特郁闷!
      

  10.   

    SELECT m.MyFavesID, m.SiteUser, p.PhotoID, p.CatID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM  `my_faves` m,  `category` c,  `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID =  '8'

    MyFavesID  SiteUser  PhotoID  CatID  PhotoTitle  PhotoURL  PublishTime  
    4 ken 113 28   uapply.gif 1094467194 
    4 ken 114 28   Error_02.gif 1094467247 
    4 ken 112 28 Ω肚眎Ω huzqu.gif 1094451736 
    4 ken 111 28 Ω肚眎Ω 21.jpg 1094451736 
    4 ken 110 28 Ω肚眎Ω top.jpg 1094451736 SELECT m.MyFavesID, m.SiteUser, p.PhotoID, p.CatID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM  `my_faves` m,  `category` c,  `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID =  '8'
    ORDER BY p.PhotoID DESC 

    MyFavesID  SiteUser  PhotoID  CatID  PhotoTitle  PhotoURL  PublishTime  
    4 ken 114 28   Error_02.gif 1094467247 
    4 ken 113 28   uapply.gif 1094467194 
    4 ken 112 28 Ω肚眎Ω huzqu.gif 1094451736 
    4 ken 111 28 Ω肚眎Ω 21.jpg 1094451736 
    4 ken 110 28 Ω肚眎Ω top.jpg 1094451736 所以你只需
    SELECT m.MyFavesID, m.SiteUser, p.PhotoID, p.CatID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM  `my_faves` m,  `category` c,  `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID =  '8'
    ORDER BY p.PhotoID DESC limit 1

    MyFavesID  SiteUser  PhotoID  CatID  PhotoTitle  PhotoURL  PublishTime  
    4 ken 114 28   Error_02.gif 1094467247 你有
    1、MAX(p.PhotoID)=p.PhotoID 所以按你的数据也只能返回一条记录
    2、GROUP BY m.SiteUser 分组时mysql只返回同组的第一条记录,如你需要使非分组字段可靠,那么你就不能用分组
      

  11.   

    SELECT m.MyFavesID, m.SiteUser, p.PhotoID, p.CatID, p.PhotoTitle, p.PhotoURL, p.PublishTime
    FROM  `my_faves` m,  `category` c,  `photo` p
    WHERE m.SiteUser = c.UserName AND c.CatID = p.CatID AND m.UserID =  '8'
    ORDER BY p.PhotoID DESC limit 1
    只能返回的是用户A收藏其中一个用户B所属的最新图片我的语句希望得到的是:
    返回的是用户A所收藏的所有(或者通过limit指定的用户数)用户所属的最新图片.
      

  12.   

    2、GROUP BY m.SiteUser 分组时mysql只返回同组的第一条记录,如你需要使非分组字段可靠,那么你就不能用分组// MySQL 扩展了 GROUP BY 的用法。在 SELECT 表达式中,你可以使用或计算没有出现在 GROUP BY 部分中的列。这代表 这个组的任何可能的值。你可以使用它避免在不必要的分类项目上进行排序和分组,这样会得到更好的性能。举例来说,在下面的例子中,你不必要以 customer.name 进行分组:
      

  13.   

    to :xuzuning(唠叨) 问题并没有解决,我不是瞎子!终究还是  谢谢 !