Foros del Web » Programando para Internet » PHP »

Arrays Consulta Mysql & PHP

Estas en el tema de Arrays Consulta Mysql & PHP en el foro de PHP en Foros del Web. Hola que tal compañeros de forosdelweb, bueno les plantearé un detalle que no le he entendido y ya e cnsultado varios temas parecidos a mi ...
  #1 (permalink)  
Antiguo 16/02/2012, 04:07
 
Fecha de Ingreso: enero-2012
Mensajes: 9
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Arrays Consulta Mysql & PHP

Hola que tal compañeros de forosdelweb, bueno les plantearé un detalle que no le
he entendido y ya e cnsultado varios temas parecidos a mi problema pero no he encontrado aun la solución, espero me puedan ayudar de favor.

Bueno pues resulta que tengo el siguiente arreglo con informacion precargada:

Código:
$critics = array(
    'Lisa Rose' => array(
        'Lady in the Water' => 2.5, 
        'Snakes on a Plane' => 3.5,
        'Just My Luck' => 3.0,
        'Superman Returns' => 3.5,
        'You, Me and Dupree' => 2.5, 
        'The Night Listener' => 3.0,
    ),
    'Gene Seymour' => array(
        'Lady in the Water' => 3.0,
        'Snakes on a Plane' => 3.5,
        'Just My Luck' => 1.5,
        'Superman Returns' => 5.0,
        'The Night Listener' => 3.0,
        'You, Me and Dupree' => 3.5,
    ), 
    'Michael Phillips' => array(
        'Lady in the Water' => 2.5,
        'Snakes on a Plane' => 3.0,
        'Superman Returns' => 3.5,
        'The Night Listener' => 4.0,
    ),
    'Claudia Puig' => array(
        'Snakes on a Plane' => 3.5,
        'Just My Luck' => 3.0,
        'The Night Listener' => 4.5,
        'Superman Returns' => 4.0,
        'You, Me and Dupree' => 2.5,
    ),
    'Mick LaSalle' => array(
        'Lady in the Water' => 3.0,
        'Snakes on a Plane' => 4.0,
        'Just My Luck' => 2.0,
        'Superman Returns' => 3.0,
        'The Night Listener' => 3.0,
        'You, Me and Dupree' => 2.0,
    ), 
    'Jack Matthews' => array(
        'Lady in the Water' => 3.0,
        'Snakes on a Plane' => 4.0,
        'The Night Listener' => 3.0,
        'Superman Returns' => 5.0,
        'You, Me and Dupree' => 3.5,
    ),
    'Toby' => array(
        'Snakes on a Plane' => 4.5,
        'You, Me and Dupree' => 1.0,
        'Superman Returns' => 4.0,
    ),
);

El cual funciona pero necesito que los datos no esten precargados o sean predeterminados, por lo cual tengo que formarlo en base a consultas,
las cuales ya las he estructurado y funcionan perfectamente en el gestor de base de datos:

Como se puede interpretar
$critics es el arreglo general
el cual tiene unos nombres principales que han evaluado unas peliculas
usuario_id Nombre_Usuario
1..............Lisa Rose
2.............Gene Seymour
3.............Michael Phillips
4.............Claudia Puig
5.............Mick LaSalle
6.............Jack Matthews
7.............Toby

Los cuales se le asignan las peliculas que han calificado
Como se puede apreciar en el ultimo que es más pequeño:
$critics = array(
'Toby' => array(
'Snakes on a Plane' => 4.5,
'You, Me and Dupree' => 1.0,
'Superman Returns' => 4.0);

El detalle es que decidi sacar primero los nombres de los usuarios con este query
puesto que el nombre de usuario lo ocupo solo una vez (asi lo analice yo no se si tenga un error ahi)
Código:
SELECT DISTINCT a.Nombre_Usuario,a.id_usuario 
FROM usuarios a,peliculas b,calificaciones c
WHERE  a.id_usuario=c.id_usuario
AND b.id_pelicula=c.id_producto
ORDER BY id_usuario

Despúes sacar con otro query las peliculas y calificaciones
Código:
SELECT a.id_usuario,b.pelicula_desc,c.calificacion
FROM usuarios a,peliculas b,calificaciones c
WHERE  a.id_usuario=c.id_usuario
AND b.id_pelicula=c.id_producto
ORDER BY id_usuario

Pero pues hasta ahi tengo no se como puedo asignar los resultados para poder formar el array como lo muestro anteriormente :)

He visto varios ejemplos que lo hacen con un foreach o con un while pero nada mas no me sale :S

Yo lo hice así pero no tuve exito:
Código:
foreach($result2 as $usuario2)  
{ 
$critics=array($usuario2["Nombre_Usuario"] =>array($usuario2["producto_desc"] =>$usuario2["calificacion"]));
}
Espero que me puedan ayudar y corregirme si estoy analizando mal el problema
Gracias y saludos.

Última edición por pablo_sgo2; 16/02/2012 a las 04:13
  #2 (permalink)  
Antiguo 16/02/2012, 04:41
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Arrays Consulta Mysql & PHP

La consulta de la db se recorre con mysql_fetch_assoc(). En cada iteración agregas a tu array los pares clave/valor como más te convenga: http://de.php.net/manual/en/function...etch-assoc.php (Ejemplo 1)
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 16/02/2012, 08:34
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Arrays Consulta Mysql & PHP

Tienes dos opciones:
La primera es hacer una consulta buscando todos los datos, tanto los de los usuarios como las películas y calificaciones y ordenarlo por el id del usuario.
Haces la consulta y deberías cargar los resultados de esta forma:

$idUsuarioAnterior="";
$critics=array();
$sql="Aquí debería ir la consulta";
$query=mysql_query($sql);
while($rs=mysql_fetch_array($query)){// Esta función te va devolviendo una por una las filas
if($rs['a.id_usuario']!=$idUsuarioAnterior){
$critics[$rs['a.nombre_usuario']]=array();
}
$critics[$rs['a.nombre_usuario']][$rs['b.pelicula_desc']=$rs['c.calificacion'];
}
Así se guardaría como lo deseas.

Otra opción es hacer una consulta para los usuarios, recorrer con un for todos ellos, y en cada uno hacer una consulta para capturar las peliculas y calificaciones de dicho usuario.
Un saludo
  #4 (permalink)  
Antiguo 16/02/2012, 13:44
 
Fecha de Ingreso: enero-2012
Mensajes: 9
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Arrays Consulta Mysql & PHP

Cita:
Iniciado por Hachikora Ver Mensaje
Tienes dos opciones:
La primera es hacer una consulta buscando todos los datos, tanto los de los usuarios como las películas y calificaciones y ordenarlo por el id del usuario.
Haces la consulta y deberías cargar los resultados de esta forma:

$idUsuarioAnterior="";
$critics=array();
$sql="Aquí debería ir la consulta";
$query=mysql_query($sql);
while($rs=mysql_fetch_array($query)){// Esta función te va devolviendo una por una las filas
if($rs['a.id_usuario']!=$idUsuarioAnterior){
$critics[$rs['a.nombre_usuario']]=array();
}
$critics[$rs['a.nombre_usuario']][$rs['b.pelicula_desc']=$rs['c.calificacion'];
}
Así se guardaría como lo deseas.

Otra opción es hacer una consulta para los usuarios, recorrer con un for todos ellos, y en cada uno hacer una consulta para capturar las peliculas y calificaciones de dicho usuario.
Un saludo
Hola que tal mira he acomodado como le he entendido a tu codigo que me proporcionaste desafortunadamente no me ha dado resultado :S
a mi no me ha quedado clara como es esta linea:
echo $critics[$rs['Nombre_Usuario']][$rs['producto_desc']]=$rs['calificacion'];

ese juego de corchetes no lo comprendo, además le he puesto un echo para ver que es lo que me imprimia y pues me da lo siguiente:
3.52.52.53.533333.53.51.5533.542.51.52.534.5422333 .54533.543144.5

y pues al parecer solo son las calificaciones pero aun asi yo esperaba que me lo mostrara como aparece arriba el array con datos precargados pero no lo forma
bueno te agradeceria me siguieras apoyando, muchas gracias.s

Código:
#Conectamos con MySQL
$conexion = mysql_connect("localhost","root","")
or die ("Fallo en el establecimiento de la conexión");
#Seleccionamos la base de datos a utilizar
mysql_select_db("carrito")
or die("Error en la selección de la base de datos");
#Efectuamos la consulta SQL
$result = mysql_query ("SELECT a.id_usuario,a.Nombre_Usuario,b.producto_desc,c.calificacion
                                FROM usuarios a,productos b,calificaciones c
                                WHERE  a.id_usuario=c.id_usuario
                                AND b.id_producto=c.id_producto
                                ORDER BY id_usuario" )
or die("Error en la consulta SQL");
$idUsuarioAnterior="";
$critics=array();
#Mostramos los resultados obtenidos
while( $rs = mysql_fetch_array ( $result )) {
   if($rs['id_usuario']!=$idUsuarioAnterior){
$critics[$rs['Nombre_Usuario']]=array();
}
echo $critics[$rs['Nombre_Usuario']][$rs['producto_desc']]=$rs['calificacion'];
}

Etiquetas: arreglos, mysql
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 19:52.