长篇道歉但我想说清楚。 我正在努力建立一个人们可以更新其状态的网站(如Facebook)。只是学习PHP。我添加了一项功能,可以更新其状态(仅限文本)或更新其状态(文本并上传该状态的照片)。我已经能够做到这一点但是在更新之后,困难是以以下形式显示之前的更新:
头像pic - 更新文本 - 更新图像(如果图像)
头像pic - 更新文本 - 默认图像(如果未上传更新图像)
默认头像pic - 更新文本 - 默认图像(如果未上传更新图像)
首先使用最新更新,然后按降序排列其余更新。
如果用户的所有更新都有更新图片(即wid_updates.attached_picture_is不为null,那么我没有问题。如果用户没有提供pic更新,那么在返回先前的更新时,所有地狱都会松动。
用户表:
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);
?>
如果所有更新都有图片,那么一切都很好。如果一个更新没有图片,则更新显示与no相同的次数。图片表中的图片,包括每张图片。如果图片中有4张图片,则每张图片都会返回4次没有图片的文字更新。
有什么问题?任何帮助表示赞赏。
答案 0 :(得分:0)
问题是您在wid_updates.attached_picture_id = picture.picture_id或wid_updates.attached_picture_id IS NULL
上进行连接(使用图片表)在没有OR部分的情况下进行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