快速總結一下:我有一個社交網站,用戶可以按照/後/票等我加入一個新的類似Facebook的活動牆功能,每個用戶的配置文件。多表聯接的返回重複的結果,類似Facebook的活動牆
我已經在這個位已經摸索了幾天似乎並不能得到它才能正常工作。我想要的是,就像我剛纔提到的那樣,就像facebook牆一樣。當訪問者訪問用戶的個人資料時,該用戶的活動將顯示出來,不管他們最近是否對某個帖子「投了贊」,發表了評論,還是發佈了自己的某些內容,我希望它顯示在他們的個人資料上,當然,最近的條目最多。
我現在正在遇到的問題是:它是兩次顯示了一些東西,它不是由最近對它們進行排序。
我有3代表在這裏工作(我只貼我使用的列):
Table structure for table votes_posts
Field Type Null Default
indexer int(11) No
post_id int(11) No
vote int(11) No
user_name varchar(250) No
date varchar(255) No
Table structure for table posts
Field Type Null Default
id int(11) No
name varchar(30) No
content text No
datetimerss varchar(255) No
category int(11) No
Table structure for table comments
Field Type Null Default
id int(12) No
post_id int(12) No
name varchar(30) No
content text No
type varchar(30) No
datetimerss varchar(255) No
$用戶只是$ _GET [ '用戶'] 的TIMEAGO()函數,簡單地顯示非常受歡迎的「xx前發佈」日期時間。
<ul class="streamActivity">
<?php
$checkActivity = "SELECT votes_posts.post_id, votes_posts.user_name, votes_posts.vote, votes_posts.date,
posts.id, posts.content, posts.name, posts.datetimerss, categories.category,
comments.post_id AS comm_postid, comments.content AS comm_content, comments.name AS comm_name, comments.datetimerss AS comm_date, comments.type
FROM `votes_posts`
LEFT OUTER JOIN `posts` ON votes_posts.post_id = posts.id
LEFT OUTER JOIN `comments` ON posts.id = comments.post_id
LEFT OUTER JOIN `categories` ON posts.category = categories.cat_id
WHERE (votes_posts.post_id = posts.id AND user_name = '$user')
OR (comments.post_id = posts.id AND comments.name = '$user')
OR (posts.name = '$user') ORDER BY votes_posts.date, posts.datetimerss, comments.datetimerss ASC";
$checkActivityResult = mysql_query($checkActivity);
if (mysql_num_rows($checkActivityResult) > 0) {
while ($sessionAct = mysql_fetch_array($checkActivityResult)) {
$category = strtolower($sessionAct['category']);
$dateVote = timeAgo($sessionAct['date']);
$datePost = timeAgo($sessionAct['datetimerss']);
$dateComm = timeAgo($sessionAct['comm_date']);
$namePost = $sessionAct['name'];
$nameComm = $sessionAct['comm_name'];
$nameVote = $sessionAct['user_name'];
$idVote = $sessionAct['post_id'];
$idPost = $sessionAct['id'];
$idComm = $sessionAct['comm_postid'];
$contentPost = $sessionAct['content'];
$contentComm = $sessionAct['comm_content'];
$typeComm = $sessionAct['type'];
if ($namePost == $user) {
$classList = 'storyPost';
$classIcon = 'iconMuttr';
$name = $namePost;
$content = $contentPost .' ... read more';
$datetime = $datePost;
}
elseif ($nameComm == $user && $typeComm == "Comment") {
$classList = 'actionPost';
$classIcon = 'iconComment';
$name = $nameComm;
$content = 'Commented "'. $contentComm .'"';
$datetime = $dateComm;
} elseif ($nameComm == $user && $typeComm == "Advice") {
$classList = 'actionPost';
$classIcon = 'iconAdvice';
$name = $nameComm;
$content = 'gave Advice "'. $contentComm .'"';
$datetime = $dateComm;
}
elseif ($nameVote == $user) {
if ($sessionAct['vote'] == "1") {
$classList = 'actionPost';
$classIcon = 'iconLaughed';
$name = $nameVote;
$content = 'Laughed at "'. $contentPost .'"';
$datetime = $dateVote;
} elseif ($sessionAct['vote'] == "2") {
$classList = 'actionPost';
$classIcon = 'iconLoved';
$name = $nameVote;
$content = 'Showed Love on "'. $contentPost .'"';
$datetime = $dateVote;
} elseif ($sessionAct['vote'] == "3") {
$classList = 'actionPost';
$classIcon = 'iconIdiot';
$name = $nameVote;
$content = 'called '. $namePost .' an Idiot for "'. $contentPost .'"';
$datetime = $dateVote;
}
}
?>
<li class="row-activity <?php echo $classList; ?>">
<a href="" class="avatar"><img src="/images/avatars/default_male.jpg" /></a>
<div class="info">
<div class="userName">
<a href=""><?php echo $name; ?></a>
</div>
<span class="msgBody"><?php echo $content; ?></span>
<div class="imgTimeStream">
<span class="img <?php echo $classIcon; ?>"></span>
<span class="source"><?php echo $datetime; ?></span>
</div>
</div>
</li>
<?php
}
} else {
echo '<p>This user has no recent activity.</p>';
}
?>
</ul>
我決不是一個專家級的程序員......我知道的一切我都非常自學了在過去的一年或兩年,所以我只能想象有多難看這確實是笑。我學習每一天,雖然,我希望能繼續:)
而且,每個類型的活動中,會有一些事情稍有不同的CSS類。 例如: 如果結果行後,則CSS類的列表項的會,如果結果行是一票,則CSS類的列表項的將是「票」 等是「後」
任何幫助,將不勝感激!
UPDATE:好多個查詢似乎正常工作......沒有更多的重複。我甚至有它只顯示最近幾個月的活動(現在反正)。現在我需要弄清楚如何混合結果,所以最近的一個(不管是投票還是帖子等)都在頂部。
P.S.我可能應該提到,很多數據將通過這一點(想想一個臉譜牆+微博喂哈哈)
歡迎來到SO!我的建議是將你分解成不同的部分和單獨查詢。如果沒有真正查看結果集,難以查明數據有點困難 – JohnP 2011-04-10 05:43:51
感謝您的快速回復:)我也在考慮這個問題......雖然我不知道如何將它們混合在一起,然後按順序排列最近的。現在,結果集看起來像這樣:post1,post1,顯示愛,稱爲白癡,post2,post2 – Nate 2011-04-10 05:47:44
想想你需要在牆上顯示單個項目的東西 - 例如:日期,標題和主體。現在編寫單獨的SQL查詢,爲每種類型的對象返回這些列。 – geofftnz 2011-04-10 05:51:43