Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Necesito presentar en una tabla HTML los resultados de una consulta a varias tablas

Estas en el tema de Necesito presentar en una tabla HTML los resultados de una consulta a varias tablas en el foro de Mysql en Foros del Web. Como el título no da para más, lo explico aquí de nuevo: Necesito presentar en una tabla HTML los resultados de una consulta a varias ...
  #1 (permalink)  
Antiguo 19/05/2011, 12:53
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Necesito presentar en una tabla HTML los resultados de una consulta a varias tablas

Como el título no da para más, lo explico aquí de nuevo:

Necesito presentar en una tabla HTML los resultados de una consulta a varias tablas de una BD MySQL, lo que tengo es esto:

Código PHP:
<?php
//Grabamos en un array los registros de la tabla lib_libros

        
$libros mysql_query("SELECT * FROM lib_libros ORDER BY lib_titulo DESC,lib_fecha DESC LIMIT " $inicio ", " CANT_LIBROS);
        
//Grabamos en una variable los registros de la tabla lib_autor

        
$autor mysql_query("SELECT nombre_autor,apellidos_autor FROM lib_autor INNER JOIN lib_libros WHERE lib_autor.id_aut = lib_libros.id_aut");

//Convertimos los resultados en un array para poder sacar los datos por su índice

        
$autor mysql_fetch_array($autor);

?>
                <table class="grilla" cellspacing="0" cellpadding="3px">
                    <tr>
                        <td class="cabecera">ID</td>
                        <td class="cabecera">Titulo</td>    
                        <td class="cabecera">Autor</td>
                        <td class="cabecera">Colecci&oacute;n</td>
                        <td class="cabecera">Editorial</td>
                        <td class="cabecera">Fecha</td>
                        <td class="cabecera">Editar</td>
                        <td class="cabecera">Borrar</td>
                    </tr>
                    <?php
                          $c 
0;
                             while (
$fila=mysql_fetch_array($libros)){
                                 if(
$c == 0){
                                
$clase "claro";
                            }else{
                                
$clase "oscuro";
                            }
                            
                            echo 
"<tr>";
                            echo 
"<td class='" $clase "'>"$fila['id_lib']."</td>";
                            echo 
"<td class='" $clase "'>"$fila['lib_titulo']."</td>";
                            echo 
"<td class=' " $clase "'>"$autor['nombre_autor']." ".$autor['apellidos_autor']."</td>";
                            echo 
"</tr>";
                            
$c++;
                            }    
                            
?>
                </table>
El problema es que en todas las filas me muestra el mismo autor.

Nota: Esto es un ejemplo simplificado, en el real hay otras tablas para editoriales y colecciones.

Espero que alguien me pueda ayudar porque esto lo estoy haciendo sólo para aprender un poco más sobre PHP y MySQL pero por libre he llegado a mi límite, no se cómo salir de esta, que seguro será sencillísimo.

Gracias por anticipado por la ayuda que me podáis prestar.
  #2 (permalink)  
Antiguo 19/05/2011, 13:00
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Es normal que siempre te devuelva el mismo autor.

Sólo llamas una vez a $autor = mysql_fetch_array($autor);

La verdad es que no exactamente porque haces dos consultas, deberías hacer una sola que combinase la tabla de autores y la de libros (que la tienes) y utilizar esa.

Aun así la consulta:

Código MySQL:
Ver original
  1. SELECT nombre_autor,apellidos_autor FROM lib_autor INNER JOIN lib_libros WHERE lib_autor.id_aut = lib_libros.id_aut

Está un poco mal hecha. Si utilizas INNER JOIN, hazlo bien. No utilices el WHERE si no ON.

Código PHP:
Ver original
  1. $libros = mysql_query("SELECT *
  2. FROM lib_autor INNER JOIN lib_libros
  3. ON lib_autor.id_aut = lib_libros.id_aut
  4. ORDER BY lib_titulo DESC,lib_fecha
  5. DESC LIMIT " . $inicio . ", " . CANT_LIBROS);

Y luego iteras con el resultado de la consulta.
  #3 (permalink)  
Antiguo 20/05/2011, 03:03
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Cita:
Iniciado por alexg88 Ver Mensaje
Es normal que siempre te devuelva el mismo autor.

Sólo llamas una vez a $autor = mysql_fetch_array($autor);
No entiendo lo que quieres decir con esto ¿me lo podrías explicar? Gracias ;)

Cita:
Iniciado por alexg88 Ver Mensaje
La verdad es que no exactamente porque haces dos consultas, deberías hacer una sola que combinase la tabla de autores y la de libros (que la tienes) y utilizar esa.
Porque, como decía, lo he simplificado para la pregunta en el foro, el código completo tiene 4 consultas: libros, autor, colección y editorial, una por cada tabla, lo que no significa que esté bien, ya que lo más probable es que se pueda hacer con menos, pero, como digo, esto es para intentar aprender un poco más sobre PHP y MySQL.

Cita:
Iniciado por alexg88 Ver Mensaje
Aun así la consulta:

Código MySQL:
Ver original
  1. SELECT nombre_autor,apellidos_autor FROM lib_autor INNER JOIN lib_libros WHERE lib_autor.id_aut = lib_libros.id_aut

Está un poco mal hecha. Si utilizas INNER JOIN, hazlo bien. No utilices el WHERE si no ON.

Código PHP:
Ver original
  1. $libros = mysql_query("SELECT *
  2. FROM lib_autor INNER JOIN lib_libros
  3. ON lib_autor.id_aut = lib_libros.id_aut
  4. ORDER BY lib_titulo DESC,lib_fecha
  5. DESC LIMIT " . $inicio . ", " . CANT_LIBROS);

Y luego iteras con el resultado de la consulta.
Ya he cambiado el WHERE por el ON pero sigue igual.

Lo que pretendo con esto es que me muestre una tabla como la siguiente, pero cada libro con su autor, así es como me la muestra ahora, sólo que con más columnas (Colección, Editorial, Fecha, Editar, Borrar):

ID.....Titulo...................................Au tor
2.......La Voluntad........................Gonzalo Torrente Ballester
1.......La saga/fuga de J.B............Gonzalo Torrente Ballester
3.......El invierno en Lisboa..........Gonzalo Torrente Ballester

¿Me podrías poner un ejemplo para el autor a ver si yo consigo sacar el resto?

Muchas gracias.
  #4 (permalink)  
Antiguo 20/05/2011, 07:25
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Pues haz varios INNER JOIN por cada tabla y luego ordenas el resultado por el nombre del autor.

Este es un ejemplo, en el que tu tendrás que cambiar las tablas y los campos por los que tu tengas:


Código MySQL:
Ver original
  1. FROM lib_autor INNER JOIN lib_libros ON lib_autor.id_aut = lib_libros.id_aut
  2. INNER JOIN lib_coleccion ON lib_libros.id_coleccion = lib_coleccion.id
  3. INNER JOIN lib_editorial ON lib_libros.id_editorial = lib_editorial.id
  4. ORDER BY lib_libros.autor, lib_libros.fecha;



Te pongo también como sería sólo con el autor (como me pediste):

Código MySQL:
Ver original
  1. FROM lib_autor INNER JOIN lib_libros ON lib_autor.id_aut = lib_libros.id_aut
  2. ORDER BY lib_libros.autor, lib_libros.titulo, lib_libros.fecha;

Esto te ordena los libros por el autor (teniendo así todos los libros de un autor juntos) y luego dentro de ese orden por titulo y fecha.
  #5 (permalink)  
Antiguo 20/05/2011, 08:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Para ir por partes...

Cita:
Iniciado por alexg88 Ver Mensaje
Te pongo también como sería sólo con el autor (como me pediste):

Código MySQL:
Ver original
  1. FROM lib_autor INNER JOIN lib_libros ON lib_autor.id_aut = lib_libros.id_aut
  2. ORDER BY lib_libros.autor, lib_libros.titulo, lib_libros.fecha;

Esto te ordena los libros por el autor (teniendo así todos los libros de un autor juntos) y luego dentro de ese orden por titulo y fecha.
Así es como lo tengo, excepto el ORDER BY porque ahora aún no me preocupa el orden, pero en la tabla web me muestra el mismo autor para todos los libros, estando bien grabado en la tabla de la bbdd el id de cada autor.
  #6 (permalink)  
Antiguo 20/05/2011, 08:41
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

¿La consulta te devuelve el mismo autor para todas las filas o eres tú, al imprimirlo en php, el que hace que aparezca el mismo autor?


Prueba esa consulta directamente en la base de datos y mira a ver que devuelve.
  #7 (permalink)  
Antiguo 20/05/2011, 08:49
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Cita:
Iniciado por alexg88 Ver Mensaje
¿La consulta te devuelve el mismo autor para todas las filas o eres tú, al imprimirlo en php, el que hace que aparezca el mismo autor?


Prueba esa consulta directamente en la base de datos y mira a ver que devuelve.
Al hacer la consulta desde el phpmyadmin devuelve los 3 autores relacionados con sus correspondientes libros, por lo que deduzco que soy yo el que lo está mostrando mal en el PHP, pero no se cómo mostrarlo bien me puedes echar un cable?

Muchas gracias por anticipado.
  #8 (permalink)  
Antiguo 20/05/2011, 08:53
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Pues sería algo así:

Código PHP:
Ver original
  1. <?php
  2. //Grabamos en un array los registros de la tabla lib_libros
  3.  
  4.         $libros = mysql_query("SELECT * FROM lib_autor INNER JOIN lib_libros ON lib_autor.id_aut = lib_libros.id_aut ORDER BY lib_libros.autor, lib_libros.titulo ASC, lib_libros.fecha DESC LIMIT " . $inicio . ", " . CANT_LIBROS);
  5.  
  6.      
  7.  
  8. ?>
  9.                 <table class="grilla" cellspacing="0" cellpadding="3px">
  10.                     <tr>
  11.                         <td class="cabecera">ID</td>
  12.                         <td class="cabecera">Titulo</td>    
  13.                         <td class="cabecera">Autor</td>
  14.                         <td class="cabecera">Colecci&oacute;n</td>
  15.                         <td class="cabecera">Editorial</td>
  16.                         <td class="cabecera">Fecha</td>
  17.                         <td class="cabecera">Editar</td>
  18.                         <td class="cabecera">Borrar</td>
  19.                     </tr>
  20.                     <?php
  21.                           $c = 0;
  22.                              while ($fila=mysql_fetch_array($libros)){
  23.                                  if($c % 2 == 0){
  24.                                 $clase = "claro";
  25.                             }else{
  26.                                 $clase = "oscuro";
  27.                             }
  28.                              
  29.                             echo "<tr>";
  30.                             echo "<td class='" . $clase . "'>". $fila['id_lib']."</td>";
  31.                             echo "<td class='" . $clase . "'>". $fila['lib_titulo']."</td>";
  32.                             echo "<td class=' " . $clase . "'>". $fila['nombre_autor']." ".$fila ['apellidos_autor']."</td>";
  33.                             echo "</tr>";
  34.                             $c++;
  35.                             }    
  36.                             ?>
  37.                 </table>
  #9 (permalink)  
Antiguo 20/05/2011, 10:18
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Gracias de nuevo alexg88,

Pues debo ser muy obtuso porque aplicando todo lo que me has ido explicando, he hecho esto y no funciona (los autores sí, pero las colecciones y editoriales no...)

Código PHP:
<?php

$libros 
mysql_query("
SELECT * 
FROM lib_autor 
INNER JOIN lib_libros 
ON lib_autor.id_aut = lib_libros.id_aut 
INNER JOIN lib_coleccion 
ON lib_libros.id_col = lib_coleccion.id_col 
INNER JOIN lib_editorial 
ON lib_libros.id_edi = lib_editorial.id_edi 
ORDER BY lib_autor.nombre_autor, lib_libros.lib_fecha 
ASC LIMIT " 
$inicio ", " CANT_LIBROS);
?>

<table class="grilla" cellspacing="0" cellpadding="3px">
                    <tr>
                        <td class="cabecera">ID</td>
                        <td class="cabecera">Titulo</td>    
                        <td class="cabecera">Autor</td>
                        <td class="cabecera">Colecci&oacute;n</td>
                        <td class="cabecera">Editorial</td>
                        <td class="cabecera">Fecha</td>
                    </tr>
                    <?php
                          $c 
0;
                             while (
$fila=mysql_fetch_array($libros)){
                                 if(
$c == 0){
                                
$clase "claro";
                            }else{
                                
$clase "oscuro";
                            }
                            
                            echo 
"<tr>";
                            echo 
"<td class='" $clase "'>"$fila['id_lib']."</td>";
                            echo 
"<td class='" $clase "'>"$fila['lib_titulo']."</td>";
                            echo 
"<td class=' " $clase "'>"$fila['nombre_autor']." ".$fila['apellidos_autor']."</td>";
                            echo 
"<td class=' " $clase "'>"$fila['col_nombre']."</td>";
                            echo 
"<td class=' " $clase "'>"$fila['edi_nombre']."</td>";
                            echo 
"<td class='" $clase "'>"cambiaf_a_normal($fila['lib_fecha']) ."</td>";
                            echo 
"</tr>";
                            
$c++;
                            }    
                            
?>
</table>
¿Me podrías explicar qué es lo que tengo mal y ponerme un ejemplo de cómo corregirlo?

Muchas gracias por anticipado.
  #10 (permalink)  
Antiguo 20/05/2011, 10:21
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

¿Has probado la consulta a ver si te da los datos correctos? Eso es lo más importante antes de nada.

Pruébalo en el phpMyAdmin y me cuentas.
  #11 (permalink)  
Antiguo 20/05/2011, 10:39
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Necesito presentar en una tabla HTML los resultados de una consulta a vari

Cita:
Iniciado por alexg88 Ver Mensaje
¿Has probado la consulta a ver si te da los datos correctos? Eso es lo más importante antes de nada.

Pruébalo en el phpMyAdmin y me cuentas.
Tienes razón, es que sólo hay una colección y una editorial, en el phpmyadmin sale correcto. Un millón de gracias, ya está resuelto.

Etiquetas: html, resultados, 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 00:24.