2011-01-13 88 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