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
版本是4.0.*
得到
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 应该是你要的结果,再想想
但是其他数据却不是p.PhotoID所属的值图
http://hrcn.cn/tmp/2.bmp
http://hrcn.cn/tmp/3.bmp
數據
http://hrcn.cn/tmp/sql.txt
但是其他数据却不是p.PhotoID所属的值
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
如果分的话那就是2*N vs 1
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 错了吗?到底错在那里?做相关的测试的时候,得到的数据显示很奇怪!特郁闷!
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只返回同组的第一条记录,如你需要使非分组字段可靠,那么你就不能用分组
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指定的用户数)用户所属的最新图片.