2013-08-18 41 views
1

我正在製作一個小型的CMS,在那裏你可以有朋友,並張貼在他們的牆上。我正在製作一個頁面,您可以在其中查看您的朋友發佈的所有帖子(在他們的個人資料中),但是我無法使其正常運行。從朋友處獲取個人資料文章

表:朋友

+---------------+---------+------+-----+---------+----------------+ 
| Field   | Type | Null | Key | Default | Extra   | 
+---------------+---------+------+-----+---------+----------------+ 
| friend_id  | int(10) | NO | PRI | NULL | auto_increment | 
| user1_id  | int(10) | NO |  | NULL |    | 
| user2_id  | int(10) | NO |  | NULL |    | 
| friends_since | int(10) | NO |  | NULL |    | 
+---------------+---------+------+-----+---------+----------------+ 

表:profile_posts

+----------------+---------+------+-----+---------+----------------+ 
| Field   | Type | Null | Key | Default | Extra   | 
+----------------+---------+------+-----+---------+----------------+ 
| post_id  | int(12) | NO | PRI | NULL | auto_increment | 
| posted_user_id | int(12) | YES |  | NULL |    | 
| user_id  | int(12) | YES |  | NULL |    | 
| date_posted | int(11) | YES |  | NULL |    | 
| total_likes | int(12) | YES |  | NULL |    | 
| users_liked | text | YES |  | NULL |    | 
| total_dislikes | int(12) | YES |  | NULL |    | 
| users_dislikes | text | YES |  | NULL |    | 
| message  | text | YES |  | NULL |    | 
+----------------+---------+------+-----+---------+----------------+ 

基本上,如果我想確定用戶是否已經張貼在他們的個人資料的現狀,posted_user_id和USER_ID列在table_posts必須匹配(posted_user_id是發佈的帖子的用戶ID,而user_id是user_id是發佈該消息的人員的ID)。

但是,我已經多次嘗試獲取朋友的狀態。

SELECT * 
FROM `friends` AS `f` 
LEFT JOIN `profile_posts` AS `pp` 
    ON `pp`.posted_user_id = `pp`.user_id 
WHERE 
    `f`.user1_id != 2 OR 
    `f`.user2_id != 2 
ORDER BY `pp`.`date_posted` DESC 
LIMIT 0,15; 

(華友世紀不工作:d)

SELECT `f`.*,`pp`.*, 
    IF(`f`.user1_id=2, `f`.user2_id, `f`.user1_id) AS `uid` 
FROM `friends` AS `f` 
LEFT JOIN `profile_posts` AS `pp` 
    ON `pp`.posted_user_id =`uid` 
WHERE 
    `f`.user1_id = `uid` OR 
    `f`.user2_id = `uid` 
ORDER BY `pp`.`date_posted` DESC 
LIMIT 0,15; 

我不知道如何誠實地做到這一點,它開始讓我憤怒,我想不出如何做到這一點。 :/

+3

yipee另一個Facebook的「克隆」 – 2013-08-18 20:58:07

+2

都能跟得上。不是Facebook的克隆。 –

+0

你能提供基於它的樣本數據和期望的輸出嗎? – peterm

回答

1

沒關係,想通了怎麼做。 :d

編輯:

SELECT 
    `f`.*, 
    `pp`.*, 
    `ai`.`name`, 
    `ai`.`lastname` 
FROM `friends` AS `f` 
LEFT JOIN `profile_posts` AS `pp` 
    ON 
     `pp`.`posted_user_id` = `pp`.`user_id` AND 
     `pp`.`user_id` = `f`.user1_id OR 
     `pp`.`user_id` = `f`.user2_id 
LEFT JOIN `account_info` AS `ai` 
    ON `ai`.`u_id` = `pp`.`user_id` 
WHERE 
    `pp`.`user_id` = `pp`.`posted_user_id` AND 
    `f`.user1_id = 1 OR 
    `f`.user2_id = 1 AND 
    `pp`.`user_id` = `pp`.`posted_user_id` 
GROUP BY `pp`.post_id 
ORDER BY `pp`.date_posted DESC 
LIMIT 0,20; 

選擇當前用戶的朋友的話,就抓住他們的朋友都型材立柱,然後加入帳戶信息表,以獲取名稱,以及其他信息。

我想,看看是否我可以讓這個更小的,如果沒有更好..

+0

如何?它可能會幫助人們在未來,這可能會給你upvotes。分享你如何解決問題以及解決問題的方法是一個好主意。 – pattyd

+0

我編輯了我的答案.. –

相關問題