Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
bucles anidados con PHP

Hola, ya estoy aqui de nuevo con una dudilla de php

Os cuento. Tengo dos tablas maestro detalle en mySQL y quiere sacar el resultado de una inner join de estas en una tabla y, claro está, en la misma celda todas las coincidencias de un registro de la cabecera (es decir, todos sus detalles)

De momento he conseguido esto
Código:
$s = "<table width=\"100%\" border=\"0\">\n";
while ( $ResultQuery = mysql_fetch_row( $IdConsulta ) )  {
   $ant = $ResultQuery[0];
   $s .="<tr>\n";
   $s .="<td width=\"8%\"><img src=\"images/".$ResultQuery[2]."\" width=\""
              .$ResultQuery[4]."\" height=\"".$ResultQuery[5]."\"></td>\n";
   $s .="<td width=\"92%\" valign=\"top\"><p>Ref : ".$ResultQuery[0]."</p>\n";
   $s .="<p>".$ResultQuery[6]."</p>\n";
   while (($ResultQuery = mysql_fetch_row($IdConsulta)) && 
            ($ant == $ResultQuery[0])){
      $s .="<p>".$ResultQuery[6]."</p>\n";  }
   $s .= "</td>\n";
   $s .= "</tr>\n";
}
$s .= "</table>\n";
pero claro, como se hacen dos lecturas de la tabla (una en cada bucle), hay registros que pierdo y no me los muestra todos.

Se que es una chorrada, pero no veo como hacerlo. Podeis darme una ayudita?

P.D. Las lineas cortadas es para que no aparezca la barra horizontal de desplazamiento

Gracias

Última edición por __cadetill fecha: 18-07-2003 a las 10:02:09.
Responder Con Cita
  #2  
Antiguo 18-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Y porque no en lugar de hacer un inner join haces dos queryes y recorres uno en cada bucle?

asi no perderias ningún registro.

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 18-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Hola y gracias por responder jachguate

Pues esta solucion es la que tengo implementada de momento, pero tambien me gustaria saber la solucion a la otra, porque, vamos, creo que ha de poderse hacer, no? (almenos el Delphi sí se puede )

Última edición por __cadetill fecha: 18-07-2003 a las 10:03:13.
Responder Con Cita
  #4  
Antiguo 20-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No estoy seguro de entender. Vamos a ver...

Supongamos que tenemos dos tablas:

personas = (id, nombre)
telefonos = (id, persona_id, telefono)

Si entiendo, tu quieres mostrar una tabla y en una sola celda poner todos los detalles, en este caso, todos llos teléfonos de una persona:

Código:

+-------+------+
| pepe  | 5-55 |
+-------+------+
| maria | 5-48 |
|       | 5-24 |
+-------+------+

Si es así, yo lo que haría es ordenar la consulta de manera que los detallles de una persona aparezcan consecutivos:

Código:
select p.nombre, t.telefono
from personas p
left join telefonos t
on (t.persona_id = p.id)
order by p.id
// Saludos
Responder Con Cita
  #5  
Antiguo 20-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Hola roman, y gracias por interesarte

Eso es cierto, y de hecho, el SQL que lanzo lo hace

Lo que no se hacer es recorrer la query SOLO creando una nueva fila en la tabla en el cambio de ID (segun el ejemplo que has puesto el cual expresa exactamente lo que quiero). No se si me he explicado mejor ahora
Responder Con Cita
  #6  
Antiguo 20-07-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Puedes escribir una fila por cada registro, tomando en cuenta que el valor de la primera columna (nombre en el ejemplo) se imprima solo cuando sea diferente al anterior. Sirvete de una variable intermedia que vaya almacenando el ultimo nombre para hacer las comparaciones.

No creo que tengas complicaciones por la cantidad de <TD>'s que utilizes.

Suerte!
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #7  
Antiguo 21-07-2003
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Hola

Prueba con este código, te adelanto que no lo he probado y no puedo garantizarte que no tenga algún bug.

Código PHP:
<table width="300" border="0" cellspacing="0" cellpadding="0">
<?
$anterior
="";
while ( 
$row mysql_fetch_array$result ) ) { 
    if ( 
$anterior=="" ) {
        
?>
        <tr>
        <td width="50"><? echo $row["id"]; $anterior=$row["id"]; ?></td>
        <td>
        <?
    
}
    echo 
$row["otro_campo"]; 
    while ( 
$row mysql_fetch_array$result ) ) { 
        if ( 
$row["id"] != $anterior ) {
            
?>
            </td></tr><tr>
            <td width="50"><? echo $row["id"]; ?></td>
            <td>
            <?
        
}  
        else { 
            echo 
$row["otro_campo"]; 
        }
        
$anterior=$row["id"];
    }    
}
?>
</td></tr>
</table>
Saludos
Emilio
Responder Con Cita
  #8  
Antiguo 21-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
gracias compañeros, lo pruebo y os cuento que tal me ha ido
Responder Con Cita
  #9  
Antiguo 21-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Bueno, lo he probado y me ha funcionado

Como para muestr un boton.... http://www.santi-joiers.com/p1.php

Creo que me ha quedado chulo y todo

Gracias a todos. Nos leemos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:18:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi