Foros del Web » Programando para Internet » PHP »

While con dos querys asociados

Estas en el tema de While con dos querys asociados en el foro de PHP en Foros del Web. Hola todos. Espero que me puedan ayudar. Tengo tres tablas en mysql (enlaces, informacion, paneles) Columnas enlaces -> id, code, nombre, url, panel Columna informacion ...
  #1 (permalink)  
Antiguo 27/03/2018, 20:53
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 18 años, 5 meses
Puntos: 10
Busqueda While con dos querys asociados

Hola todos.

Espero que me puedan ayudar.

Tengo tres tablas en mysql (enlaces, informacion, paneles)

Columnas enlaces -> id, code, nombre, url, panel
Columna informacion -> id, code, nombre, texto
Columna paneles -> id, code, nombre, numpanel

Ej de datos
enlaces -> 1, 1010, directo, http://domain.ltd, 1
enlaces -> 2, 2020, directo, http://domain.ltd,2
enlaces -> 3, 1010, indirecto, http://domain.ltd,2

informacion -> 1,1010, titulo informacion, texto informacion

paneles-> 1, 1010, 1, panel 1
paneles-> 2, 2020, 1, panel 1
paneles-> 3, 1010, 2, panel 2

En las tres tablas tengo una columna llamada 'code' con un dato igual para relacionarlas.

En un archivo php llamo los datos de información, implementando $_GET['id']; (archivo.php?id=1010) me muestra la información que deseo. Ahí todo bien.

Pero ahora quiero mostrar todos los datos de la tabla organizada en tablas o paneles.


Código PHP:
Ver original
  1. <div class="">
  2. <ul>
  3. <li><a href="#"> <?php echo $row_paneles['numpanel']; ?></a></li>
  4. </ul>
  5. <ul>
  6. <a href="<?php echo $row_enlaces['url']; ?>"><?php echo $row_enlaces['nombre']; ?></a>
  7. </ul>
  8. </div>

La idea es que me muestre todos los datos organzizado en cada panel, viéndose así:



Implementando un while me muestra todos los paneles que haya agregado, pero no sé cómo hacer para que los enlaces se muestren según la consulta en el mismo while.

Código PHP:
Ver original
  1. <?php do { ?>
  2. <div class="">
  3. <ul>
  4. <li><a href="#"> <?php echo $row_paneles['numpanel']; ?></a></li>
  5. </ul>
  6. <ul>
  7. <a href="<?php echo $row_enlaces['url']; ?>"><?php echo $row_enlaces['nombre']; ?></a>
  8. </ul>
  9. </div>
  10. <?php } while ($row_paneles = mysql_fetch_assoc($paneles)); ?>

Alguna idea?

Gracias de antemano.
__________________
@ivancamiloGo
  #2 (permalink)  
Antiguo 27/03/2018, 21:27
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: While con dos querys asociados

Primeramente te digo que estas utilizando mysql y es mala idea, ya que esa libreria esta depreciada y te va a dar problemas a futuro.

Por otro lado, prueba utilizando 2 funciones para la tarea, por ejemplo:

Código PHP:
Ver original
  1. function enlaces($X){
  2.     $a = $this->db->query("SELECT * FROM enlaces WHERE codigo = '$X'");
  3.     if($a->num_rows()>=1){
  4.         return $a->fetch_array();
  5.     }else{
  6.         return false;
  7.     }
  8. }
  9.  
  10.  
  11. function paneles(){
  12.     $a = $this->db->query("SELECT * FROM paneles");
  13.  
  14.     if($a->num_rows()>=1){
  15.         return $a->fetch_array();
  16.     }else{
  17.         return false;
  18.     }
  19. }
  20.  
  21.  
  22. $paneles = paneles();
  23.  
  24. if($paneles){
  25.         //Inicio la lista Principal
  26.         echo "<ul>";
  27.     foreach($paneles as $item){
  28.         //Inicio el Item de la Lista
  29.         echo "<li>".$item['titulo'];
  30.         $enlaces = enlaces($item['codigo']);
  31.         //Valido si hay enlaces para el codigo
  32.         if($enlaces){
  33.             //Si Hay enlaces inicio la sublista del item
  34.             echo "<ul>";
  35.             //Recorro los enlaces retornados
  36.             foreach($enlaces as $en){
  37.                 //Agrego las URL
  38.                 echo "<li>".$en['url']."</li>";
  39.             }
  40.             //Cierro la sub lista
  41.             echo "</ul>";
  42.         }else{
  43.             //Si no hay URLs indico el mensaje
  44.             echo "<li>Sin Enlaces para este panel</li>";
  45.         }
  46.         //Cierro el item principal
  47.         echo "</li>";
  48.     }
  49.     //Cierro la lista Completa
  50.     echo "</ul>";
  51.  
  52. }else{
  53.     //Si no hay paneles muestro el mensaje
  54.     echo "No hay paneles que mostrar";
  55. }
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 28/03/2018, 09:55
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 18 años, 5 meses
Puntos: 10
Respuesta: While con dos querys asociados

Cita:
Iniciado por xfxstudios Ver Mensaje
Primeramente te digo que estas utilizando mysql y es mala idea, ya que esa libreria esta depreciada y te va a dar problemas a futuro.

Por otro lado, prueba utilizando 2 funciones para la tarea, por ejemplo:

Código PHP:
Ver original
  1. function enlaces($X){
  2.     $a = $this->db->query("SELECT * FROM enlaces WHERE codigo = '$X'");
  3.     if($a->num_rows()>=1){
  4.         return $a->fetch_array();
  5.     }else{
  6.         return false;
  7.     }
  8. }
  9.  
  10.  
  11. function paneles(){
  12.     $a = $this->db->query("SELECT * FROM paneles");
  13.  
  14.     if($a->num_rows()>=1){
  15.         return $a->fetch_array();
  16.     }else{
  17.         return false;
  18.     }
  19. }
  20.  
  21.  
  22. $paneles = paneles();
  23.  
  24. if($paneles){
  25.         //Inicio la lista Principal
  26.         echo "<ul>";
  27.     foreach($paneles as $item){
  28.         //Inicio el Item de la Lista
  29.         echo "<li>".$item['titulo'];
  30.         $enlaces = enlaces($item['codigo']);
  31.         //Valido si hay enlaces para el codigo
  32.         if($enlaces){
  33.             //Si Hay enlaces inicio la sublista del item
  34.             echo "<ul>";
  35.             //Recorro los enlaces retornados
  36.             foreach($enlaces as $en){
  37.                 //Agrego las URL
  38.                 echo "<li>".$en['url']."</li>";
  39.             }
  40.             //Cierro la sub lista
  41.             echo "</ul>";
  42.         }else{
  43.             //Si no hay URLs indico el mensaje
  44.             echo "<li>Sin Enlaces para este panel</li>";
  45.         }
  46.         //Cierro el item principal
  47.         echo "</li>";
  48.     }
  49.     //Cierro la lista Completa
  50.     echo "</ul>";
  51.  
  52. }else{
  53.     //Si no hay paneles muestro el mensaje
  54.     echo "No hay paneles que mostrar";
  55. }
Gracias por responder.
Una pregunta.
Tengo una duda con la conexión a la base de datos.

Código PHP:
Ver original
  1. db = mysqli_connect("localhost", "root", "roor", "flix");
  2. function enlaces($X){
  3.     $a = $this->db->query($db, "SELECT * FROM enlaces WHERE codigo = '$X'");
No sé si así la esté haciendo bien.

Y en todo caso recibo un error de Fatal error: Using $this when not in object context in
$a = $this->db->query("SELECT * FROM paneles");
__________________
@ivancamiloGo
  #4 (permalink)  
Antiguo 29/03/2018, 11:49
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 18 años, 5 meses
Puntos: 10
Respuesta: While con dos querys asociados

Bueno, lo llevo así:

Código PHP:
Ver original
  1. <?php
  2.     class DriveDB {
  3.         public $db_connect;
  4.  
  5.         function __construct($ip_host, $username, $password, $db) {
  6.             if (!$this->db_connect = new mysqli($ip_host, $username, $password, $db))
  7.                 echo "No hay conexión";
  8.         }
  9.  
  10.         public function enlaces($X){
  11.             $a = $this->db_connect->query("SELECT * FROM enlaces WHERE codigo = '".$X."';");
  12.  
  13.             if($a->num_rows > 0)
  14.                 return $a->fetch_array(MYSQLI_ASSOC);
  15.  
  16.             return false;
  17.         }
  18.  
  19.         public function paneles(){
  20.             $a = $this->db_connect->query("SELECT * FROM paneles;");
  21.  
  22.             if($a->num_rows > 0)
  23.                 return $a->fetch_array(MYSQLI_ASSOC);
  24.  
  25.             return false;
  26.         }  
  27.     }
  28.  
  29.     $Instancia  = new DriveDB("localhost", "root", "roor", "flix");
  30.     $paneles    = $Instancia->paneles();
  31.  
  32. $paneles = paneles();
  33.  
  34.     if($paneles){
  35.             //Inicio la lista Principal
  36.             echo "<ul>";
  37.         foreach($paneles as $item){
  38.             //Inicio el Item de la Lista
  39.             echo "<li>".$item['titulo'];
  40.             $enlaces = enlaces($item['codigo']);
  41.             //Valido si hay enlaces para el codigo
  42.             if($enlaces){
  43.                 //Si Hay enlaces inicio la sublista del item
  44.                 echo "<ul>";
  45.                 //Recorro los enlaces retornados
  46.                 foreach($enlaces as $en){
  47.                     //Agrego las URL
  48.                     echo "<li>".$en['url']."</li>";
  49.                 }
  50.                 //Cierro la sub lista
  51.                 echo "</ul>";
  52.             }else{
  53.                 //Si no hay URLs indico el mensaje
  54.                 echo "<li>Sin Enlaces para este panel</li>";
  55.             }
  56.             //Cierro el item principal
  57.             echo "</li>";
  58.         }
  59.         //Cierro la lista Completa
  60.         echo "</ul>";
  61.  
  62.     }else{
  63.         //Si no hay paneles muestro el mensaje
  64.         echo "No hay paneles que mostrar";
  65.     }
  66. ?>


Pero me da el siguiente error:

Warning: Illegal string offset 'titulo' in on line 37
la línea es: echo "<li>".$item['titulo'];
Fatal error: Call to undefined function enlaces()
la línea es: $enlaces = enlaces($item['codigo']);
__________________
@ivancamiloGo

Etiquetas: asociados, mysql, nombre, querys, tabla
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 11:33.