tengo este diseño en mi sitio web. Mis módulos son: noticias, artículos, videos, fotos, descargas, reseñas, concursos, encuestas, etc. Todo en tablas separadas. Tengo una tabla de Me gusta en la que a los usuarios les puede gustar o desagradar una publicación (en su caso, favoritos). La consulta para obtener estos no es tan complicada.
primer lugar en su mayor parte la mayoría de mis tablas para los módulos están estructuradas de la misma manera:
- Identificación
- título
- contenido
- user_id (autor)
- fecha
- etc
con algunas excepciones que a veces el título se llama pregunta o no hay columna de contenido. Eso no causa ningún problema.
Mis gustos mesas está configurado de esta manera:
- Identificación
- page_id
- module_id (lo que la mesa ¿Vino de ...Tengo una tabla módulos, donde cada módulo tiene un título, ID asociado, directorio, etc.)
- post_id (corresponde al ID de tabla de módulos)
- user_id (usuario que hizo la afición o publicación)
- estado (0 = igual, 1 = no les gusta)
- fecha (cuando el agrado/desagrado tuvo lugar)
Módulos ejemplo de tabla:
- Identificación
- título
- directorio
- post_type
Ejemplo
id title directory post_type
1 News news news
2 Episode Guide episodes episode
3 Albums discography/albums album
Esencialmente suyo tendría un conjunto similar hacia arriba, la modificación de la estructura de la tabla según sea necesario para sus necesidades.
consulta para obtener todos los gustos o favoritos para un usuario concreto:
$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
Ok que puede ser difícil para que usted pueda entender ya que tengo un montón de mis propias variables, pero básicamente se obtiene el ID del módulo y ID de la tabla Me gusta y luego ejecuta una consulta para obtener el título de la publicación y cualquier otra información que desee como el autor original.
Tengo configuradas las funciones del "módulo" que devolverán la url o el título del módulo dado que usted proporciona una identificación para ello.
# 2, si la tabla es indexada correctamente, el rendimiento de la consulta con respecto a esa gran tabla debería ser similar a # 1. –