我有我的網站上這樣的設計。我的模塊是:新聞,文章,視頻,照片,下載,評論,測驗,民意調查等等。所有內容都在單獨的表格中。我有一個喜歡的桌子,用戶可以喜歡或不喜歡一個帖子(在你的案例中)。查詢這些並不複雜。
首先在大多數情況下我的大部分用於模塊表都構成同樣的方式:
- ID
- 標題
- 內容
- USER_ID(作者)
- 日期
- etc
有幾個例外是有時標題被稱爲問題或沒有內容列。這不會導致任何問題。
我喜歡錶的設置是這樣的:
- ID
- PAGE_ID
- 是模塊(沒有它來自哪個表...我有一個模塊表,其中每個模塊都有一個名稱,相關編號,目錄等)
- POST_ID(對應到模塊表中的id)
- USER_ID(用戶是誰做的喜好或張貼)
- 狀態(0 =與,1 =不喜歡)
- 日期(當喜好/不喜歡發生)
模塊表例如:
例
id title directory post_type
1 News news news
2 Episode Guide episodes episode
3 Albums discography/albums album
基本上你將有一個類似的設置,根據需要爲您的需要修改表結構。
查詢來獲取所有喜歡或收藏爲特定的用戶:
$getlikes = mysql_query("SELECT DISTINCT post_id, module_id, page_id FROM likes WHERE user_id = $profile_id ORDER BY id DESC LIMIT $offset, $likes_limit", $conn);
$likes = mysql_num_rows($getlikes);
if($likes == "0"){
echo "<br><Center>$profile_username does not have any liked posts at this time.</center><BR>";
}
else {
echo "<table width='100%' cellspacing='0' cellpadding='5'>
<Tr><th>Post</th><th align='center'>Module</th><th align='center'>Page</th><tr>";
while ($rowlikes = mysql_fetch_assoc($getlikes)) {
// echo data
$like_page_id = $rowlikes['page_id'];
$like_module_id = $rowlikes['module_id'];
$like_post_id = $rowlikes['post_id'];
// different modules have different fields for the "title", most are called title but quotes is called "content" and polls is called "questions"
if($like_module_id == "11"){
$field = "question";
}
elseif($like_module_id == "19"){
$field = "content";
}
else{
$field = "title";
}
// FUNCTIONS
PostURL($like_page_id, $like_module_id, $like_post_id);
ModTitle($like_module_id);
ModTable($like_module_id);
ModURL($like_page_id, $like_module_id);
fpgURL($like_page_id);
$getpostinfo = mysql_query("SELECT $field AS field FROM $mod_table WHERE id = $like_post_id", $conn);
$rowpostinfo = mysql_fetch_assoc($getpostinfo);
$like_post_title = $rowpostinfo['field'];
// Using my "tiny" function to shorten the title if the module is "Quotes"
if($like_module_id == "19"){
Tiny($like_post_title, "75");
$like_post_title = "\"$tiny\"";
}
if(!$like_post_title){
$like_post_title = "<i>Unknown</i>";
}
else {
$like_post_title = "<a href='$post_url'>$like_post_title</a>";
}
echo "<tr class='$altrow'>
<td>$like_post_title</td>
<td align='center'><a href='$mod_url'>$mod_title</a></td>
<td align='center'>$fpg_url</td>
</tr>";
$altrow = ($altrow == 'altrow')?'':'altrow';
} // end while
echo "<tr><Td align='center' colspan='3'>";
// FUNCTIONS - Pagination links
PaginationLinks("$cs_url/users/$profile_id", "likes");
echo "</td></tr></table>";
} // end else if no likes
好了,可能是你很難理解,因爲我有很多我自己的變量,但基本上它得到的模塊ID和從喜歡的表中發佈ID,然後運行查詢以獲得帖子的標題以及我想要的原始作者的任何其他信息。
我已經「模塊」功能設置將返回網址或給你提供它的ID模塊的稱號。
#2,如果表是正確的索引針對一個大表查詢的性能應該是相似的#1。 –