PHP查询从3个表中选择有关用户及其朋友的信息

时间:2011-02-07 17:13:53

标签: php mysql

我有这3张桌子:

用户表(PK user_id)

Fields: user_id, user_first_name, user_last_name, username, user_email...etc

伙伴表(FK user1_id,来自用户表中PK user_id的user2_id)

pal_id    user1_id    user2_id          status        timestamp
7           98              97               0     2011-02-02 21:44:28
8           92              98               1     2011-02-04 08:06:00
9           95              92               0     2011-02-04 08:05:54
10          97              92               1     2011-02-04 08:05:28
11          97              95               1     2011-02-04 08:06:33
9           92              93               1     2011-02-04 08:05:54
10          79              92               1     2011-02-04 08:05:28
11          97              95               1     2011-02-04 08:06:33

图片表(来自用户表中PK user_id的FK user_id)

picture_id  picture_url             picture_thumb_url               user_id  avatar         timestamp
73      ../User_Images/66983.jpg    ../User_Images/Thumbs/66983.jpg     92     0    2011-02-03 21:52:02
74      ../User_Images/56012.jpg    ../User_Images/Thumbs/56012.jpg     93     1    2011-01-25 12:09:58
75      ../User_Images/58206.jpg    ../User_Images/Thumbs/58206.jpg     95     0    2011-01-22 22:12:35
76      ../User_Images/85428.jpg    ../User_Images/Thumbs/85428.jpg     98     0    2011-01-23 23:50:16
77      ../User_Images/42325.jpg    ../User_Images/Thumbs/42325.jpg     98     0    2011-01-24 00:11:15
78      ../User_Images/73154.jpg    ../User_Images/Thumbs/73154.jpg     98     1    2011-01-24 00:11:15
81      ../User_Images/92865.jpg    ../User_Images/Thumbs/92865.jpg     92     0    2011-01-31 18:24:34
82      ../User_Images/75611.jpg    ../User_Images/Thumbs/75611.jpg     92     0    2011-01-26 18:08:52
83      ../User_Images/74829.jpg    ../User_Images/Thumbs/74829.jpg     95     0    2011-02-01 20:48:48
84      ../User_Images/5987.jpg     ../User_Images/Thumbs/5987.jpg      92     1    2011-02-03 21:52:02

我正在创建一个社交网站,我希望在PHP生成的表中显示用户的朋友。我想在这些缩略图下方显示朋友缩略图和其他信息,这样如果您点击缩略图,就会转到该用户的个人资料。

从上面来看,用户92是用户98的朋友,因为他们已经确认了友谊(显示为status ='1')

用户92有4个朋友......他要求2个,其他2个用户向他发送了请求。

他的朋友是用户98,97,93和79。

看看这个:(解释如何添加好友)

'A'添加'B'

user1将为'A',user2将为pal表上的'B'

如果'B'加了'A'

user1将为'B',user2将成为pal table上的'A'

用户可以拥有存储在上面图片表中的图片。用户从他的照片中选择他的头像......这是通过设置他的一个picture.avatar ='1'来完成的。

我们的用户92选择了他自己上传的头像pic。用户98和93也是如此。另外两个朋友有默认的头像图像。 (所有图像都存储在用户图像文件夹中)。

我的问题。

到目前为止,例如,在用户92的个人资料中,我只能为拥有头像的用户检索朋友信息。如何更改我的代码以便能够获得具有头像的朋友和不具有头像的朋友?

我的PHP代码:

<?php
//get pal info
$query_pal_info1 = "SELECT pals.user2_id AS pals_id1, users.user_first_name AS pals_first_name, users.user_last_name AS pals_last_name, picture.picture_thumb_url AS 
picture, picture.avatar AS avatar FROM pals INNER JOIN (users LEFT JOIN picture ON picture.user_id = users.user_id) ON users.user_id = pals.user2_id WHERE 
pals.user1_id = '$user_id' AND picture.avatar = 1 GROUP BY pals_id1";
$pal_info1 = mysql_query($query_pal_info1 , $connections) or die(mysql_error());

$query_pal_info2 = "SELECT pals.user1_id AS pals_id1, users.user_first_name AS pals_first_name, users.user_last_name AS pals_last_name, picture.picture_thumb_url AS 
picture, picture.avatar AS avatar FROM pals INNER JOIN (users LEFT JOIN picture ON picture.user_id = users.user_id) ON users.user_id = pals.user1_id WHERE 
pals.user2_id = '$user_id' AND picture.avatar = 1  GROUP BY pals_id1";
$pal_info2 = mysql_query($query_pal_info2 , $connections) or die(mysql_error());

//echo table with pal information
echo "\n<table>";
$j = 5;
while (($row_pal_info1 = mysql_fetch_assoc($pal_info1)) && ($row_pal_info2 = mysql_fetch_assoc($pal_info2)))
{
    if($j==5) echo "\n\t<tr>";
    $thumbnail_user = $row_pal_info1['picture'] != '' ? $row_pal_info1['picture'] : '../Style/Images/default_avatar.png';
    echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2={$row_pal_info1['pals_id1']}'>
    <img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n";
    $thumbnail_user = $row_pal_info2['picture'] != '' ? $row_pal_info2['picture'] : '../Style/Images/default_avatar.png';
    echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2={$row_pal_info2['pals_id1']}'>
    <img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n";
    $j--;
    if($j==0) {
    echo "\n\t</tr>\n\t<tr>";
    $j = 5;
    } 
}
if($j!=5) echo "\n\t\t<td colspan=\"$j\"></td>\n\t</tr>";
echo "\n</table>";
?>

在我的查询中:$ query_pal_info1和$ query_pal_info2,我有... AND picture.avatar = 1.我明白这只会带来我的朋友有头像。如何更改此语句以便能够获得所有伙伴,无论是否有图像。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

从查询中删除AND picture.avatar = 1

将来,将查询复制到sql编辑器,稍微玩一下,并查看需要删除的谓词以获得所需结果并不会有什么坏处。