Foros del Web » Programando para Internet » PHP »

Ayuda con código : explode e implode

Estas en el tema de Ayuda con código : explode e implode en el foro de PHP en Foros del Web. Hola a todos. En mi base de datos tengo una tabla llamada rating con 4 campos : c1,c2 y c3. c1 es el id del ...
  #1 (permalink)  
Antiguo 12/12/2006, 11:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 280
Antigüedad: 20 años, 6 meses
Puntos: 1
Ayuda con código : explode e implode

Hola a todos.

En mi base de datos tengo una tabla llamada rating con 4 campos : c1,c2 y c3. c1 es el id del usuario, q vota sobre el id de pelicula c2, con una valoracion c3.

Algunos datos de la tabla son_

c1 c2 c3
-----------
1 101 4
1 900 3
1 300 2
1 55 4
...
2 11 3
2 43 5
...
etc...

Lo que quiero es meter en una nueva base de datos el id del usuario (c1) y un array (separado por comas) con las peliculas y las valoraciones de este usuario. Ejemplo, INSERT INTO tabla(id_usuario,peliculas,valoraciones) VALUES(1,"101,900,300,55","4,3,2,4").

Con el siguiente código me lo hace mal, por ejemplo, el usuario 1 vota 53 peliculas, pues crea vectores de 53 elementos separados por coma. ¿que falla? echadle un vistazo a ver si veis el problema:

Código PHP:
<?
//Conectamos a la base de datos

//OBTENEMOS TODOS LOS DATOS DE LA TABLA ratings
$consulta1 "SELECT DISTINCT(c1) FROM ratings";
$resultado1 mysql_query($consulta1) or die(mysql_error());
$i 0;
while((
$row1 mysql_fetch_row($resultado1))&&($i<3)){
    
$id_usuario $row1[0];
        
    
//Obtenemos los valores para cada usuario
    
$consulta2 "SELECT c2,c3,c4 FROM ratings WHERE c1 = $id_usuario";
    
$resultado2 mysql_query($consulta2) or die(mysql_error());
    
$cuantos mysql_num_rows($resultado2);
    
    
$vector_peliculas = array($cuantos);
    
$vector_calificaciones = array($cuantos);
    while(
$row2 mysql_fetch_row($resultado2)){
        
$id_pelicula $row2[0];
        
$calificacion $row2[1];
        
$timestamp $row2[2];
        
        for(
$i=0;$i<$cuantos;$i++){
            
$vector_peliculas[$i] = $id_pelicula;
            
$vector_calificaciones[$i] = $calificacion;
        }
        
        
$peliculas implode(",",$vector_peliculas);
        
$calificaciones implode(",",$vector_calificaciones);
        
        echo 
"Peliculas $peliculas - $calificaciones<br>";
        
    }
    echo 
"<br>";
    
$i++;

}


?>
Los datos que irian a la nueva tabla serán, $id_usuario,$peliculas y $calificaciones.

Gracias.
  #2 (permalink)  
Antiguo 12/12/2006, 13:19
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Ayuda con código : explode e implode

Puedes probar con este código:
Código PHP:
<?php
// datos de conexión y selección de bd
mysql_pconnect'servername''username''password' );
mysql_select_db'db' );

// jalamos los datos de tu tabla
$consulta "SELECT * FROM ratings ORDER BY c1";
$res mysql_query$consulta );
$num_res mysql_num_rows$res );

if ( !
$num_res )
{
   echo 
"No se obtuvieron resultados de la consulta.";
}
else
{
   
$id 1;
   
$pelicula = array();
   
$valor = array();
   
$e 0;

   while ( 
$fila mysql_fetch_array$res ) ) // manipulamos las filas a nuestro antojo
   
{
      
$id_usuario $fila['c1'];

      if ( 
$id_usuario == $id // si no hay un cambio de id, agregamos los valores de las peliculas y su valoracion a los array
      
{
         
$pelicula[$e] = $fila['c2'];
         
$valor[$e] = $fila['c3'];
         
$e += 1;
         continue;
      }
      else 
// si hay un cambio en el id insertamos los valores en la tabla
      
{
         
$e 0;
         
$peliculas implode","$pelicula );
         
$valoraciones implode","$valor );

         echo 
$id_usuario."|".$peliculas."|".$valoraciones."<br/>"// mostramos los datos en pantalla para saber que es lo que se inserto en la bd

         
$insercion "INSERT INTO tabla ( id_usuario, peliculas, valoraciones ) VALUES(".$id_usuario.",'".$peliculas."','".$valoraciones."')";
         
$res_insert mysql_query$insercion );

         
mysql_free_result$res_insert );

         
$id $fila['c1'];
         
$pelicula[$e] = $fila['c2'];
         
$valor[$e] = $fila['c3'];
         
$e += 1;
      }
   }

   
mysql_free_result$res );
}
?>
Aún no lo he probado pero creo que en teoría debería funcionar. Espero sea lo que necesitabas o por lo menos te de una idea. Suerte
  #3 (permalink)  
Antiguo 13/12/2006, 04:39
 
Fecha de Ingreso: octubre-2003
Mensajes: 280
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Ayuda con código : explode e implode

Funciona bien, pero para el usuario 1 no coge las peliculas ni las valoraciones. Y si tiene en la base de datos.
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 10:56.