Foros del Web » Programando para Internet » PHP »

Entradas relacionadas

Estas en el tema de Entradas relacionadas en el foro de PHP en Foros del Web. Hola, me gustaria hacer un script en php para que muestre las entradas relacionadas por tags, estaria bueno que entre todos aportemos idea para ir ...
  #1 (permalink)  
Antiguo 02/10/2011, 13:09
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Entradas Relacionadas - Manos a la obra!

Hola, me gustaria hacer un script en php para que muestre las entradas relacionadas por tags, estaria bueno que entre todos aportemos idea para ir mejorando el codigo. Yo masomenos tengo algo de comos se haria. Lo ideal es que se mostrara solo las entradas relacionadas que coencidan 2 tags minimo y que solo muestre 5 entradas relacionadas.

Podriamos hacer algo com esto:

Código PHP:
// Traemos la entrada actual
$query "SELECT * FROM `entradas` WHERE idUnico = '$_GET[idUnico]'";
$resultado mysql_query ($query$dbConn);
$entradaActual mysql_fetch_assoc ($resultado);
$arrEntrada = array();
// Listamos todas las entradas
$query "SELECT * FROM `entrada` WHERE fechaPublicado < '".date('Y-m-d H:i:s')."' ORDER BY fechaPublicado DESC LIMIT 5";
$resultado mysql_query ($query$dbConn);
while ( 
$entrada mysql_fetch_assoc ($resultado)) {
    
array_push$arrEntrada,$entrada );
}

foreach ( 
$arrEntrada as $entrada) { 
$nombre $entrada['nombre'];
$contenido $entrada['contenido'];
$tags $entrada['tag'];
// separamos los tags que se encuentran separados por ","
$tag explode(","$tags);
$tag2 explode(","$entradaActual['tag']);    

if(
$tag[0]==$tag2[0]) {
if(
$tag[1]==$tag2[1]) {
// mostramos la entrada relacionada
echo $nombre;
echo 
$contenido;
}}
if(
$tag[1]==$tag2[1]) {
if(
$tag[2]==$tag2[2]) {
// mostramos la entrada relacionada
echo $nombre;
echo 
$contenido;
}}
if(
$tag[2]==$tag2[2]) {
if(
$tag[3]==$tag2[3]) {
// mostramos la entrada relacionada
echo $nombre;
echo 
$contenido;
}}


Basicamente seria algo como eso. El problema que hay ahora es las condiciones de que sean iguales dos tag, como hacer algo mas generico, y no tener que condicionar por cada tag.
__________________
Los mejores juegos de PC gratis en ******

Última edición por hackcrack; 02/10/2011 a las 14:33
  #2 (permalink)  
Antiguo 02/10/2011, 21:41
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Entradas Relacionadas - Manos a la obra!

Tienes que hacer un filtro de palabras comunes que no te sirvan en las tags. Luego puedes contarlas con array_count_values por ejemplo o algo parecido para no tener que hacer tanto condicional y sacar las 5 tags con más coincidencias.

En Google hay bastante información sobre esto que te ayudará a sacar ideas.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 03/10/2011, 09:28
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Entradas Relacionadas - Manos a la obra!

Pero no necesito hacer un filtro, ya que los tags se pondrian manualmente en un registro de la base de datos. Y ya que nombraste array_count_values, lo que podria hacer es hacer un recorrido entre todos las entradas y la entrada actual, y en cada recorrido juntar los tags de esa entrada y la entrada actual en un array, y por array_count_values comprobar si alguno se repite mas de 1 vez, si es positivo que muestre la entrada.
__________________
Los mejores juegos de PC gratis en ******
  #4 (permalink)  
Antiguo 09/10/2011, 20:24
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Entradas relacionadas

Hola queria saber como hacer para que si estoy en una entrada que tiene un registro con X cantidad de tags, busque en las demas entradas que tenga al menos 2 tags iguales y lo muestre como relacionado.
__________________
Los mejores juegos de PC gratis en ******
  #5 (permalink)  
Antiguo 09/10/2011, 21:03
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Entradas relacionadas

Dude WTF are you talking about?

Bah, no lo resistí Vamos, de qué hablas? Algún CMS? Algun script o aplicación propia? ¿?
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #6 (permalink)  
Antiguo 09/10/2011, 22:22
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Entradas relacionadas

jeje, con repecto a lo que preguntas nose que tiene quever, pero te respondo, es un sistema propio.
__________________
Los mejores juegos de PC gratis en ******
  #7 (permalink)  
Antiguo 09/10/2011, 22:33
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Entradas relacionadas

¿Como qué no sabes? Wow
Tiene que ver mucho, comenzando desde la estructura...

Ahora existen varias formas, todo depende de la estructura de tu base de datos. Puedes obtener todos los post (Título, url y tag)
y con PHP haces una comparación de los tags del post actual con los que tragiste de la base de datos.
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 09/10/2011, 22:42
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Entradas relacionadas

Jeje si eso lo se, osea como hacer la consulta a la base de datos, el problema es que me lio un poco con la condicion de al menos tener dos consultas iguales.

Tengo echo hasta aca:

Código PHP:
// Traemos la entrada actual
$query "SELECT * FROM `entradas` WHERE idUnico = '$_GET[idUnico]'";
$resultado mysql_query ($query$dbConn);
$entradaActual mysql_fetch_assoc ($resultado);
$arrEntrada = array();
// Listamos todas las entradas
$query "SELECT * FROM `entrada` WHERE fechaPublicado < '".date('Y-m-d H:i:s')."' ORDER BY fechaPublicado DESC LIMIT 5";
$resultado mysql_query ($query$dbConn);
while ( 
$entrada mysql_fetch_assoc ($resultado)) {
    
array_push$arrEntrada,$entrada );
}

foreach ( 
$arrEntrada as $entrada) { 
$nombre $entrada['nombre'];
$contenido $entrada['contenido'];
$tags $entrada['tag'];
// separamos los tags que se encuentran separados por ","
$tag explode(","$tags);
$tag2 explode(","$entradaActual['tag']); 
Pero para hacer las comparaciones, que conviene mas un while, forreach o que? convendria tambien guardar las tags en un array?
__________________
Los mejores juegos de PC gratis en ******

Etiquetas: entradas, mysql, registro, relacionadas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:15.