Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL选择用户_Php_Mysql_Sql - Fatal编程技术网

Php SQL选择用户

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

下面的查询选择了一个好友请求脚本,该脚本显示了个人资料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_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