У меня есть этот дизайн на моем сайте.Мои модули: новости, статьи, видео, фотографии, загрузки, обзоры, тесты, опросы и т. Д. И т. Д. Все в отдельных таблицах.У меня есть таблица лайков, где пользователям могут нравиться или не нравиться пост (в вашем случае избранное).Запрос, чтобы получить их, не так уж и сложен.
Во-первых, большинство моих таблиц для модулей структурированы одинаково:
- id
- title
- content
- user_id (author)
- date
- и т. Д.
с некоторыми исключениями, которые иногдаЗаголовок называется вопрос или нет столбца контента.Это не вызывает каких-либо проблем.
Мои таблицы лайков настроены так:
- id
- page_id
- module_id (какая таблица былаэто происходит из ... У меня есть таблица модулей, где у каждого модуля есть заголовок, связанный идентификатор, каталог и т. д.)
- post_id (соответствует идентификатору таблицы модулей)
- user_id (пользователь, которыйнравится или опубликовано)
- статус (0 = нравится, 1 = не нравится)
- дата (когда имело место / не понравилось)
Пример таблицы модулей:
- id
- title
- directory
- post_type
Пример
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
Хорошо, чтоВам может быть трудно понять, так как у меня много собственных переменных, но в основном он получает идентификатор модуля и идентификатор записи из таблицы лайков изатем запускает запрос, чтобы получить заголовок поста и любую другую информацию, которую я хочу, как первоначального автора.
У меня настроены функции «модуля», которые будут возвращать URL-адрес или заголовок предоставленного вами модуляидентификатор для этого.