Foros del Web » Programando para Internet » PHP »

tablas relacionadas

Estas en el tema de tablas relacionadas en el foro de PHP en Foros del Web. esto es lo que quiero obtener y esto es lo que obtengo como podéis ver en las imágenes, se trata de imprimir una serie de ...
  #1 (permalink)  
Antiguo 02/06/2014, 06:37
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
tablas relacionadas

esto es lo que quiero obtener



y esto es lo que obtengo



como podéis ver en las imágenes, se trata de imprimir una serie de elementos y sus elementos relacionados. para ello tengo 2 tablas relacionadas. en la tabla A tengo los elementos padre y en la tabla B los elementos hijos.

esta es la consulta que hago y el dom que uso

Código SQL:
Ver original
  1. $cadena = "SELECT * FROM tablaA LEFT OUTER JOIN tablaB ON tablaA.ref = tablaB.ref_padre";
  2.  
  3. $resultado = $mysqli->query($cadena);
  4.  
  5. while ($row = $resultado->fetch_array(MYSQLI_ASSOC)) {
  6. ?>
  7.         <section>
  8.             <img src="<?php echo $row["imagen"];?>" />
  9.             <aside>
  10. <?php
  11. IF ($row["imagen_hijo"] != NULL) {
  12. echo '<img src="'.$row["imagen_hijo"].'.jpg" />';
  13. }
  14. ?>
  15.         </aside>
  16.         </section>
  17. <?php
  18. }
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #2 (permalink)  
Antiguo 02/06/2014, 07:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tablas relacionadas

Es un problema de programación, no de MySQL.
La tabla, por lo que dices, devuelve correctamente los datos, sólo que devuelve dos registros (o más) cuando hasy 1...N elementos relacionados con el primero.
Como el problema ex visualización, es ajeno a los datos. E un tema de cómo recorres los resultados devueltos, y en eso MySQL no interviene.
Desde el punto de vista programático, lo que debes hacer es crear una linea nueva por cada cambio que haya del identificador del primer campo del la tabla devuelta, y sólo en ese caso.
En otras palabras, no es un simple while o foreach, ni tampoco un sencillo if, sino uno anidado.
Pero eso es tema de PHOP, como dije.

Movido a Foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/06/2014, 07:36
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: tablas relacionadas

dejo como lo he resuelto

Código PHP:
Ver original
  1. <?php
  2. $mysqli = @new mysqli("localhost", "root", "", "bd");
  3.  
  4.  
  5. if ($mysqli->connect_errno) {
  6.  
  7.     die();
  8. }
  9.  
  10. $mysqli->set_charset("utf8");
  11.  
  12. $tipo = $_GET["t"];
  13.  
  14. $cadena = sprintf("SELECT * FROM tablaA LEFT OUTER JOIN tablaB ON tablaA.ref = tablaB.ref_padre WHERE tablaA.tipo = '%s'", $mysqli->real_escape_string($tipo));
  15.  
  16. $resultado = $mysqli->query($cadena);
  17.  
  18. $ArrSinRepeticion = Array();
  19. $ArrSinRepeticion[0] = 0;
  20. $i = 0;
  21.  
  22.     while ($row = $resultado->fetch_array(MYSQLI_ASSOC)) {
  23.  
  24.         $comparacion = 0;
  25.  
  26.         for ($x = 0; $x < sizeof($ArrSinRepeticion); $x++) {
  27.  
  28.             $comparacion = StrCmp($ArrSinRepeticion[$x], $row["ref"]);
  29.  
  30.             if ($comparacion == 0) {
  31.  
  32.                 break;
  33.             }
  34.         }
  35.  
  36.  
  37.         if ($comparacion != 0 && $i == 0) {
  38. ?>
  39.  
  40.             <section class="producto" id="<?php echo $row["ref"];?>">
  41.             <img src="<?php echo $row["imagen"];?>.jpg" class="imgPadre" />
  42.             <aside class="imgHijas">
  43. <?php
  44.             array_push($ArrSinRepeticion, $row["ref"]);
  45.  
  46.             if ($row["imagen_hija"] != NULL) {
  47.  
  48.                 echo '<img src="'.$row["imagen_hija"].'.jpg" />';
  49.             }
  50.  
  51.         } else if ($comparacion != 0 && $i != 0) {
  52. ?>
  53.             </aside>
  54.             </section>
  55.             <section class="producto" id="<?php echo $row["ref"];?>">
  56.             <img src="<?php echo $row["imagen"];?>.jpg" class="imgPadre" />
  57.             <aside class="imgHijas">
  58. <?php
  59.             array_push($ArrSinRepeticion, $row["ref"]);
  60.  
  61.             if ($row["imagen_hija"] != NULL) {
  62.  
  63.                 echo '<img src="'.$row["imagen_hija"].'.jpg" />';
  64.             }
  65.  
  66.         } else {
  67.  
  68.                 echo '<img src="'.$row["imagen_hija"].'.jpg" />';
  69.         }
  70. $i++;
  71.     }
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 06/06/2014 a las 06:38

Etiquetas: join, mysql, null, relacionadas, select, sql, tabla, tablas
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:02.