求一SQL语句!!!!(比较难)

现在我要同时查找两个表
1、user_info_m(username,sex) 2、user_photo(username,photo,post_date)
user_info_m 里有hasphoto字段,当hasphoto<>0的时候就显示user_photo里该用户上传的最新的photo图片,否则就根据用户的性别sex(在user_info_m中)显示默认的图片!
怎么样能用一个sql语句搞定??
如果用户上传了照片,则user_info_m.username=user_photo.username;但如果没上传,user_photo里就没有任何该用户的记录!

我感觉一条SQL语句就应该可以搞定了!多谢
---------------------------------------------------------------

SELECT User_Info_m.UserName,
If(User_Info_m.HasPhoto<>0,User_Photo.Photo,If(User_Info_m.Sex='男','Photo_Boy.Gif','Photo_Girl.Gif'))
FROM User_Info_m LEFT JOIN User_Photo ON User_Info_m.UserName = User_Photo.UserName

---------------------------------------------------------------

注意: a=user_info_m(username,sex),b=user_photo,我用的是oracle语法
select b.bphoto
from zz1 a,z22 b
where a.aname=b.bname and a.aphoto='1'
and b.bpost_date = (select max(bpost_date) from z22 where bname=a.aname)
union
select aphoto
from zz1
where aphoto<>'1';

-------------------------------------------------------------------------
有个问题,
没有实现显示最新的照片!
还有就是返回不重复的记录!!(每个人只有一条记录!)

MySQL在查询方面功能并不是太完善的
建议在 User_Photo 中只保存用户最新的一份图片

难道你的 User_Info_m.UserName 中有重复数据吗?
呵呵,如是那你要用 DISTINCT 了

SELECT DISTINCT User_Info_m.UserName,
If( User_Info_m.HasPhoto<>0,
User_Photo.Photo,
If( User_Info_m.Sex='男',
'Photo_Boy.Gif',
'Photo_Girl.Gif'
)
)
FROM User_Info_m LEFT JOIN User_Photo
ON User_Info_m.UserName = User_Photo.UserName
GROUP BY User_Info_m.UserName

如果在 User_Photo 表中同一个用户有多条信息,
呵呵,
那麻烦了,
你必须先处理 User_Photo ,将其中最新的数据放入一个临时表中,
再用上面的SQL来处理数据

Published At
Categories with 数据库类
comments powered by Disqus