2011-01-13 80 views
0

道歉的长度,但我想澄清。 我正在尝试建立一个网站,让人们可以更新他们的状态(如Facebook)。只是学习PHP。我添加了一项功能,可以更新其状态(仅限文本),或者可以更新其状态(文本并上传该状态的照片)。我已经能够做到这一点,但更新后,难度是表示形式的一个以前的更新:使用头像图像显示降序状态更新并更新图像

化身PIC - 更新文本 - 更新图像(如图像)

化身PIC - 更新文本 - 默认图像(如果没有上传更新图片)

默认的头像PIC - 更新文本 - 默认图像(如果没有上传更新图片)

使用最新的更新,然后再剩下的降序排列。

如果用户的所有更新都有更新图片(即wid_updates.attached_picture_is不为空​​,那么我没有问题。如果用户没有提供图片更新,那么当返回先前的更新时,所有的更新都会丢失。

用户表:

user_id, first_name, last_name, tel_no, address, username etc. 

Wid_pdates表:

update_id, update_text, attached_picture_id, user_id, timestamp 

图片表:

picture_id, picture_url, picture_thumb_url, user_id, avatar(bit) 

头像位默认为0,如果是用户头像(头像)图片,则设为1。

我的PHP代码:

<?php 
$user_id = $_SESSION['UserSession']; 
//query user avatar 
mysql_select_db($database_connections, $connections); 
$query_avatar_thumb = "SELECT picture_thumb_url FROM picture WHERE user_id='$user_id' AND avatar='1'"; 
$avatar_thumb_result = mysql_query($query_avatar_thumb) or die(mysql_error()); 
$avatar_thumb = mysql_fetch_assoc($avatar_thumb_result); 

//query username 
$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); 

//query update image 
$query_wid_updates = "SELECT update_text, picture_thumb_url FROM wid_updates JOIN picture ON wid_updates.user_id = '$user_id' 
AND ((wid_updates.attached_picture_id = picture.picture_id) OR (wid_updates.attached_picture_id IS NULL)) ORDER BY wid_updates.update_id DESC"; 
$wid_updates = mysql_query($query_wid_updates, $connections) or die(mysql_error()); 
$row_wid_updates = mysql_fetch_assoc($wid_updates); 
?> 

如果所有的更新都有一幅画,那么一切都很好。如果一个更新没有显示更新的图片显示的次数与否相同。照片表中的照片,包括每张照片。如果图片中有4张图片,则无图片的文字更新将连同每张图片返回4次。

出了什么问题?任何帮助赞赏。

回答

0

的问题是,你的上wid_updates.attached_picture_id = picture.picture_id或wid_updates.attached_picture_id IS NULL

只是做一个LEFT JOIN联接(与图片表)没有或部分。类似于:

SELECT update_text, picture_thumb_url FROM wid_updates 
LEFT JOIN picture 
ON wid_updates.attached_picture_id = picture.picture_id 
ORDER BY wid_updates.update_id DESC 

不确定为什么您还要匹配连接中的user_id。但是,如果你需要,添加到我的查询:)

啊,没关系,只得到与他们的照片特定用户的更新(picture_id将是NULL,如果没有图片被附后)做这样的:

SELECT update_text, picture_thumb_url FROM wid_updates 
LEFT JOIN picture 
ON wid_updates.attached_picture_id = picture.picture_id 
WHERE wid_updates.user_id = '$user_id' 
ORDER BY wid_updates.update_id DESC 
+0

谢谢StefanHållén给你回复。原因是我在连接上匹配user_id是因为图片表保存了其他用户的图片。这是我的profile.php页面,我希望用户只能看到他们过去的更新。在主页上,他们会看到他们和其他用户 – 2011-01-13 15:25:44