我的网站上有这个设计。我的模块是:新闻、文章、视频、照片、下载、评论、测验、民意调查等。所有这些都在单独的表格中。我有一个喜欢表,用户可以在其中喜欢或不喜欢帖子(在您的情况下为收藏夹)。获取这些的查询并不复杂。
首先,我的模块表的大部分结构都是相同的:
- 身份证
- 标题
- 内容
- user_id(作者)
- 日期
- 等
除了一些例外情况,有时标题称为问题或没有内容列。这不会导致任何问题。
我的点赞表是这样设置的:
- 身份证
- page_id
- module_id(它来自什么表...我有一个模块表,其中每个模块都有一个标题、关联的 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
好吧,你可能很难理解,因为我有很多自己的变量,但基本上它从 likes 表中获取模块 ID 和帖子 ID,然后运行查询以获取帖子的标题和任何其他我想要的信息和原作者一样。
我设置了“模块”函数,如果您为其提供了一个 ID,它将返回模块的 url 或标题。