Foros del Web » Programando para Internet » PHP »

foreach anidado

Estas en el tema de foreach anidado en el foro de PHP en Foros del Web. Buenas noches a todos por aquí y disculpen las molestias pero queria aclara y que me puedan orientar haber si estoy haciendo lo correcto, lo ...
  #1 (permalink)  
Antiguo 08/04/2013, 02:10
 
Fecha de Ingreso: septiembre-2012
Mensajes: 112
Antigüedad: 11 años, 7 meses
Puntos: 1
foreach anidado

Buenas noches a todos por aquí y disculpen las molestias pero queria aclara y que me puedan orientar haber si estoy haciendo lo correcto, lo que pasa es que estoy haciendo una pequeña web de usuarios, por el momentos solo tengo 3 tablas:
1.usuarios
2.comentarios
3.amigos


Lo que supuesta mente hice es imprimir todos los mensajes que "mis amigos" publican ya sea en su muro o que se yo, lo primero que hago es hacer un join de la tabla usuarios a la de amigos (esto solo para sacar los datos de cada matricula) y muestro el nombre y su matricula pero ojo solo muestro los usuarios que son amigos de la matricula '1101551' después de todos los amigos de esa matricula los recojo en otro foreach para imprimir sus mensajes, espero haberme entendido y por favor agradecería su apoyo de antemano muchísimas gracias.

Mis tablas



Mi codigo php
Código PHP:
<?php

  
require_once( 'classmysqli/class.db.php' );
     
$database = new DB();

     
//Saco la relacion entre las tablas 'usuarios' y 'amigos' para mostrar los datos de cada matricula 
     //Y que sean amigos del usuario que tenga la matricula 1101551
     
$querys "SELECT usuarios.nombre, amigos.amigo"
     
$querys .= " FROM usuarios";
     
$querys .= " JOIN amigos ON usuarios.matricula=amigos.amigo";
     
$querys .= " WHERE amigos.id_matricula=1101551";
     
$usuarios $database->get_results$querys );

     foreach(
$usuarios as $usuario){

         
$querys "SELECT * FROM comentario where id_matricula='$usuario[1]'";
         
$comentarios $database->get_results$querys );

         foreach(
$comentarios as $comentario){
             echo 
$usuario[0].' dijo: '.$comentario[1].'<br>';
         }
    
     }
    
?>

Y me imprime esto:
Código:
Pablo dijo:Esto es un mensaje de prueba.
Pablo dijo: Este es otro mensaje y mi nombre es pablo.
Maria perez dijo: Hola soy maria.

Última edición por Jennifert; 08/04/2013 a las 02:16
  #2 (permalink)  
Antiguo 08/04/2013, 02:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: foreach anidado

Falta información de la estructura de las tabla para ayudarte.

Pero sumpongamos que

Usuarios
id_matricula
nombre

Comentarios
id
id_matricula FK Usuarios.id_matricula
comentario
fecha

Amigos
id_matricula FK Usuarios.id_matricula
id_matricula_amigo FK Usuarios.id_matricula

Luego en una sola query

Código MySQL:
Ver original
  1. SELECT u.nombre,c.comentrio FROM comentario c
  2.          INNER JOIN usuarios u c.id_matricula=u.id_matricula
  3. where c.id_matricula IN (SELECT a.id_matricula_amigo
  4.                         FROM amigos a
  5.                         WHERE a.id_amtricula=1101551
  6.                         UNION
  7.                         SELECT a.id_matricula
  8.                         FROM amigos a
  9.                         WHERE a.id_amtricula_amigo=1101551
  10.                         UNION
  11.                         SELECT 1101551)
  12. ORDER BY u.nombre,c.fecha;

ahí tienes todos los comentarios de los amigos de 1101551 y los suyos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 08/04/2013 a las 02:33

Etiquetas: foreach, html, select, sql, tabla, usuarios
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 00:25.