2011-02-04 98 views
2

我有这3个表:PHP如何查询从3个表需要的信息在一个select语句

用户表(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 

图象表(从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  92  0 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的好朋友,因为他们已经证实友谊(示出为状态=“1”)

user1_id在帕尔斯得到友谊的发起者的用户ID。对于pal_id = 8,用户92请求友谊,95确认它。如果用户95请求了友谊并且已经确认,则user2_id将会读取92.用户92具有另一个朋友,用户97.97发起友谊。

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

现在,我将如何让我的PHP查询显示朋友缩略图和信息?

我有这个迄今为止(我想要的结果是路要走!)

<?php require_once('Connections/connections.php'); ?> 
<?php 
//query username 
$user_id = $_SESSION['UserSession']; 
$user_id = mysql_real_escape_string($user_id); 
mysql_select_db($database_connections, $connections); 
$query_user_info = "SELECT username FROM users WHERE user_id='$user_id'"; 
$user_info = mysql_query($query_user_info, $connections) or die(mysql_error()); 
$row_user_info = mysql_fetch_assoc($user_info); 

bla bla bla 

<?php 
while ($pal_no = mysql_fetch_assoc($pal_no_result)) 
{ 
    //get pal info 
    $query_pal_info = "SELECT * FROM users INNER JOIN pals ON (pals.user1_id = users.user_id) OR (users.user_id = pals.user2_id) 
    INNER JOIN picture ON picture.user_id = users.user_id AND picture.avatar = '1' WHERE users.user_id = '$user_id'"; 
    $pal_info = mysql_query($query_pal_info , $connections) or die(mysql_error()); 
    $totalRows_pal_info = mysql_num_rows($pal_info); 

    //echo table with pal information 
    echo "\n<table>"; 
    $j = 5; 
    while ($row_pal_info = mysql_fetch_assoc($pal_info)) 
    { 
     if($j==5) echo "\n\t<tr>"; 
     $thumbnail_user = $row_pal_info['picture_thumb_url'] != '' ? $row_pal_info['picture_thumb_url'] : '../Style/Images/default_avatar.png'; 
     echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2={$row_pal_info['user_id']}'> 
     <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_info = "SELECT * FROM users INNER JOIN pals ON (pals.user1_id = users.user_id) OR (users.user_id = pals.user2_id) 
    INNER JOIN picture ON picture.user_id = users.user_id AND picture.avatar = '1' WHERE users.user_id = '$user_id'"; 

如何解决呢?先谢谢你们。

+0

如果你仍然有问题,那么你可以给我发送你的数据库导出sql文件 – 2011-02-04 11:10:20

+0

@experimentX。也许我在我的数据库中有多余的信息。你有我可以发送给的电子邮件地址? – 2011-02-04 14:03:21

回答

1

这是我的最终答案!这是完美的工作!

class MySQLDatabase{ 
    private $hostname = 'localhost'; 
    private $username = 'root'; 
    private $password = 'password'; 
    private $dbname = 'test'; 
    private $result; 

    private $connection; 

    function __construct() 
    { 
     $this->connect(); 
    } 

    public function connect() 
    { 
     $this->connection = mysql_connect($this->hostname, $this->username, $this->password); 
     if (!$this->connection) 
      die(mysql_error());   

     if (!mysql_select_db($this->dbname)) 
      die(mysql_error()); 
    } 

    public function query($sql) 
    { 
     if(!$this->connection) 
      $this->connect(); 
     $this->result = mysql_query($sql);  
     if(!$this->result) 
      die(mysql_error()); 
     return $this->result; 
    } 

    public function numOfRows() 
    { 
     return mysql_num_rows($this->result); 
    } 

    public function fetchArray($resultset) 
    { 
     return mysql_fetch_assoc($resultset); 
    } 
} 

$mysqldb = new MySQLDatabase(); 

$userid = 92; 


$sql1 = "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 ". 
    " picure, 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". 
    " =".$userid." AND picture.avatar = 1 GROUP BY pals_id1;"; 

$palinfo1 = $mysqldb->query($sql1); 


$sql2 = "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 picure, 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.user2_id = ".$userid." AND picture.avatar = 1 GROUP BY pals_id1;"; 
$palinfo2 = $mysqldb->query($sql2); 


echo "<table>"; 

while($palinfo = $mysqldb->fetchArray($palinfo1)){ 
    echo "<tr>"; 

    foreach($palinfo as $info => $value){ 
     echo "<td>$value</td>"; 
    } 

    echo "</tr>"; 
} 

while($palinfo = $mysqldb->fetchArray($palinfo2)) 
{ 
    echo "<tr>"; 

    foreach($palinfo as $info => $value){ 
     echo "<td>$value</td>"; 
    } 

    echo "</tr>"; 
} 


echo "</table>"; 

而且您还需要至少两个查询来显示所有朋友列表。祝您的项目好运。