Php SQL选择用户
下面的查询选择了一个好友请求脚本,该脚本显示了个人资料pic、家乡、用户id以及请求与某个用户成为好友的用户的全名Php SQL选择用户,php,mysql,sql,Php,Mysql,Sql,下面的查询选择了一个好友请求脚本,该脚本显示了个人资料pic、家乡、用户id以及请求与某个用户成为好友的用户的全名 SELECT a.hometown, a.first_name, a.uid, a.last_name, b.friend_one, b.friend_two, b.friend_request_id, p.thumbnail FROM users a, friend_reques
SELECT
a.hometown,
a.first_name,
a.uid,
a.last_name,
b.friend_one,
b.friend_two,
b.friend_request_id,
p.thumbnail
FROM
users a,
friend_requester b,
profile_pics p
WHERE
a.uid = b.friend_one
AND b.friend_two = $uid
AND p.uid_fk = $uid
ORDER BY b.created DESC LIMIT 5
我的问题是,我没有为friend_requester表中的每个查询返回1个用户,而是返回3个实例,例如具有不同配置文件图片的同一用户。因此,如果用户上传了3张个人资料图片,这些图片将存储为
id=1, profile_pic=profile_pic1.jpg...
id=1 profile_pic=profile_pic2.jpg...
id=1 profile_pic=profile_pic3.jpg...
我收到同一用户的3个不同框,要求与登录用户成为朋友
正如Hituptny提到的,我想从“created”列的“profile_pics”表中选择最新插入的图片 那么你想要哪张照片?图片应该有一个与之相关的时间戳,也许您可以提取图片的日期,并获取最接近NOW()或curdate()的日期,以便显示最近的图片。^^我不认为你可以按顺序分组,但你应该选择b.created,这样你就可以看到它检索图片的顺序。按Uid\u FK分组,将max created和internal join返回图片表(在我的子查询“MaxPic”中完成)
如果可以将新的派生表添加到联接中,则可以执行以下操作:
SELECT a.hometown, a.first_name, a.uid, a.last_name,
b.friend_one, b.friend_two, b.friend_request_id,
p.thumbnail
FROM users a,
friend_requester b,
(Select MAX(Created) as Created, uid_fk from profile_pics) p_date,
profile_pics p
WHERE
a.uid = b.friend_one AND b.friend_two = $uid AND p.uid_fk = $uid
AND p_date.Created=p.Created And p_date.uid_fk=p.uid_fk
ORDER BY b.created DESC LIMIT 5
或者,如果图片是最新的,您可能希望pic表中的“flag”列包含1,否则包含0,-这种类型的问题似乎会出现很多,并且随着数据库的增长,并且有更多旧图片,如果每次都需要检查每个条目,您将遇到性能问题。使用标志,您可以更轻松地为性能编制索引。此外,这个查询只需要添加一个:where flag=1。每次插入新图片时,将标志设置为1,并将所有其他用户的标志设置为0
干杯,
David您需要确保加入
p
到a
或b
。否则,它是一个交叉连接,将匹配上一个表中的每一行。gms-否。如果$uid是一个键,则不需要连接它们,您已经通过匹配相同的静态值保证了唯一性。问题是优化器是否会知道这一点。对不起,我忘了提及这一点。我想要最新插入的图片,它将来自“created”列下的“profile_pics”表。您好,Gareth我正在使用$uid作为登录用户的会话id,因此您的代码运行良好,但它错误地返回与登录用户的缩略图相匹配的缩略图,而不是与好友请求者匹配的缩略图。我该如何解决这个问题?我想您需要将where子句更改为where a.uid=$uid
SELECT a.hometown, a.first_name, a.uid, a.last_name,
b.friend_one, b.friend_two, b.friend_request_id,
p.thumbnail
FROM users a,
friend_requester b,
(Select MAX(Created) as Created, uid_fk from profile_pics) p_date,
profile_pics p
WHERE
a.uid = b.friend_one AND b.friend_two = $uid AND p.uid_fk = $uid
AND p_date.Created=p.Created And p_date.uid_fk=p.uid_fk
ORDER BY b.created DESC LIMIT 5