Lectura de una base de datos.

Resumen.

Una vez que tenemos los datos guardado en nuestra base de datos, lo siguiente será poder ver esos datos en una página, de eso nos vamos a ocupar en este capitulo. Primero veremos como hacer un listado con los registros, y seguidamente veremos como crear una página donde se muestra cada registro accesible desde el listado. Es justamente lo que estas viendo cuando estas en el curso de MySQL.

Artículo.

Con este artículo vamos a ver como crear un listado con los registros que tenemos en nuestra tabla de registro de usuarios, y lo haremos creando una página con una lista con los datos mas elementales y seguidamente veremos como creamos una página donde aparezcan todos los datos de ese usuario.

La forma mas simple de leer una base de datos es la siguiente:
<?php // Lectura de una tabla MySQL include('archivos/func_conexionBD.php'); $Conex_BD ConectaBD();     $_Leer_SQL "SELECT * FROM $tb1";     $_Lectura mysqli_query($Conex_BD$_Leer_SQL);  while($registro mysqli_fetch_array($_Lectura)){     echo "              ".$registro['usuario']." | ".$registro['email']." | ".$registro['f_regis']." <br />     ";  } DesconectaBD($Conex_BD); ?>
¿Y que es lo que hemos hecho? Muy sencillo, en la variable $_Leer_SQL hemos definido la consulta que queremos hacer a la base de datos. Con la variable $_Lectura ejecutamos la consulta y con el bucle “while” y la función “mysqli_fetch_array” mostramos el resultado de esta consulta en pantalla, y esto es todo.

Pero que sea todo, no quiere decir que no se puedan hacer mas cosas, y lo que podemos hacer modificar la consulta que ejecutamos en la variable $_Leer_SQL. Veamos que cosas podemos hacer con esa consulta desgranando que hacemos en cada una de ellas.

En nuestra consulta
SELECT * FROM $tb1
El SELECT se refiere a que campos queremos mostrar, si ponemos un asterisco “*” nos dará todos los campos de nuestra tabla, pero en algunas tablas, con muchos campos, si solo queremos consultar unos pocos campos, podemos hacer que la consulta solo afecte a unos sustituyendo el asterisco por el nombre de los campos que nos interesan, lo haremos de la siguiente manera:
SELECT usuario, email, f_regis FROM $tb1
Ahora, en lugar de aparecer el * tenemos los nombres de los campos que nos interesan, por lo que si queremos mostrar otro dato aparte de los 3 indicados en la consulta, no nos vasta con agregarlo dentro de la instrucción “echo”, tendremos que agregarlo también a la consulta. De esta manera se optimizan la consulta, cosa que como hemos dicho antes, es muy importante. Pero ojo, esto no quiere decir que hacer una consulta sobre todos los campos pueda no tener sentido. Es una cuestión de lógica básica, si tenemos una tabla con 10 campos y vamos a listar 8 de ellos, puede ser mas lógico hacer la consulta mediante el asterisco. Para esto no existe una norma, es un poco cuestión de adaptarse a cada caso concreto.

Pero volvamos a la consulta y sigamos desgranándola, tras los campos vemos la instrucción FROM, con la que indicamos la tabla sobre la que haremos la consulta y seguidamente la variable que contiene el nombre de la tabla.

Como vemos, la lógica es muy simple: “seleccionar campos en la tabla”, que es como podríamos traducir a nuestro leguaje lo que dice la consulta efectuada.

Pero las cosas no se quedan así, hay muchas mas opciones que podemos contemplar. Vamos ahora con el operador WHERE, que nos servirá para mostrar resultados en función de una condición.
SELECT * FROM $tb1 WHERE sexo = '2'
Con esta modificación de la consulta lo que hacemos es mostrar todos los usuarios que son mujeres, recordemos que en nuestro registro guardábamos el sexo asignando 1 a los hombres y 2 a las mujeres. La consulta podría traducirse como: “seleccionar todos los campos en la tabla (contenida en la variable) donde el campo sexo es igual a 2”. Pero además, podemos agregar mas campos sobre el condicional WHERE, lo aremos mediante el concatenador AND.
SELECT * FROM $tb1 WHERE sexo = '2' AND validaok = 'si'
Ahora la consulta nos muestra los usuarios que son mujeres y tiene su cuenta de usuario validada.

Otra cosa elemental en la lectura de datos es el orden en que estos se muestran, así podemos ordenar por campos concretos y un sentido, ascendente o descendente, lo haremos así:
SELECT * FROM $tb1 WHERE sexo = '2' AND validaok = 'si' ORDER BY id DESC
Mediante ORDER BY indicamos el campo por el que queremos ordenar, en este caso, el “id”, y con DESC indicamos que el orden sea descendente, si lo quisiéramos en orden ascendente usaríamos el operador ASC.

También podemos determinar cuantos registros queremos que se muestren mediante el operador LIMIT.
SELECT * FROM $tb1 WHERE sexo = '2' AND validaok = 'no' ORDER BY id DESC LIMIT 2
En este caso hemos limitado el número de registros que se mostraran a 2, y dado que el orden asignado es DESC, serán los dos últimos registrados, con ASC serian los 2 primeros.

LIMIT también puede recibir dos parámetros, por ejemplo LIMIT 5, 4. En este caso, a partir del registro número 5 mostrara 4 resultados, que serán en sentido ascendente o descendente según el ORDER asignado.
SELECT * FROM $tb1 WHERE sexo = '2' AND validaok = 'no' ORDER BY id DESC LIMIT 5, 4
Y esto es en esencia definir una consulta a una base de datos, se pueden hacer más cosas, por supuesto que si, pero dado que este es un curso introductorio a las bases de datos, y que este tipo de consultas es las más habitual, no nos extenderemos mas.

Llegados a este punto vamos a diseccionar el contenido del bucle “while” que nos permitirá mostrar los datos en nuestras pantallas.
while($registro = mysqli_fetch_array($_Lectura)){     echo "              ".$registro['usuario']." | ".$registro['email']." | ".$registro['f_regis']." <br />     ";  }
Con la función mysqli_fetch_array() generamos un array asociativo con los datos almacenados en nuestra tabla, e imprimiendo este bucle, podemos ver los datos guardados tal y como puede verse. Tenemos las variables que contienen cada dato expresadas como valor de array $registro['campo'], que para imprimirlas tenemos que usar la unión ".$registro['campo']." y como separador entre los datos hemos usado el símbolo pleca (|), para finalizar cada registro agregamos un salto de línea (<br />).

Si esto resulta un poco confuso podemos hacerlo mas claro agregando unas líneas de código, de la siguiente forma:
while($registro = mysqli_fetch_array($_Lectura)){          $usuario = $registro['usuario'];     $email = $registro['email'];         $fecha = $registro['f_regis'];     echo "$usuario | $email | $fecha <br />";  }
Lo que hemos hecho es sencillo, hemos creado una variable con el nombre del campo que queremos recoger y ya la podemos imprimir como una variable cualquiera, sin la confusión que puede generar las comillas dobles y los puntos.

Otro detalle interesante que comentar es el relativo a la fecha, como ya dijimos, la forma adecuada de guardar una fecha en una base de datos es aaaa-mm-dd, pero esta forma para algunos, entre los que mi incluyo, no me gusta, prefiero la forma dd-mm-aaaa. Para hacer esta transformación podemos usar una función como esta, y la aplicaremos de la siguiente forma:
while($registro = mysqli_fetch_array($_Lectura)){          $usuario = $registro['usuario'];     echo "              $usuario | ".$registro['email']." | ".Forma_Fecha($registro['f_regis'])[5]." <br />     ";  }
sin olvidar, por supuesto, que antes debemos cargar la función en nuestra página.

Para simplificar el código a su mínima expresión hemos presentado los datos de una forma poco practica, separados con plecas, lo mas lógico seria presentarlos dentro de una tabla, veamos como lo hacemos.
<?php // Lectura de una tabla MySQL include('archivos/func_conexionBD.php'); include('archivos/funcion_orden_fecha.php'); $Conex_BD ConectaBD();     $_Leer_SQL "SELECT * FROM $tb1 WHERE sexo = '2' AND validaok = 'no' ORDER BY id DESC";     $_Lectura mysqli_query($Conex_BD$_Leer_SQL);  echo '<table border="1" width="80%">     <tr>         <td><b>Usuario</b></td>         <td><b>Email</b></td>         <td><b>Fecha</b></td>     </tr>'; while($registro mysqli_fetch_array($_Lectura)){          $usuario $registro['usuario'];     echo "<tr>             <td>$usuario</td>             <td>".$registro['email']."</td>             <td>".Forma_Fecha($registro['f_regis'])[5]."</td>         </tr>";  } echo '</table>'; DesconectaBD($Conex_BD); ?>
Para guardar los datos en una tabla tenemos que tener en cuenta que hay partes de la tabla que no se pueden repetir, y otra que se va a repetir, tantas veces como registros existan. Por tanto, el encabezado de la tabla tiene que quedar fuera del bucle y lo mismo ocurre con el cierre de la tabla, solo tendremos dentro del bucle una fila, la que contiene los datos y se repetirá tantas veces como registros existan.

Por ultimo vamos a ver como, de este simple listado, podemos acceder a todos los datos del registro del usuario. Para ello crearemos un enlace, por ejemplo sobre el nombre de usuario y enviaremos la variable usuario a una nueva página en la que aparecerán todos los datos de ese usuario.
    echo "<tr>             <td><a href=\"ficha_usuario.php?us=$usuario\" title=\"Ver ficha del usuario\">$usuario</a></td>             <td>".$registro['email']."</td>             <td>".Forma_Fecha($registro['f_regis'])[5]."</td>         </tr>";
En la página ficha_usuario.php recibimos la variable mediante el método GET, es decir:

$usuario = $_GET['us'];
Y la consulta seria la siguiente:

SELECT * FROM $tb1 WHERE usuario = '$usuario' LIMIT 1
Ni que decir tiene, que toda variable pasada por URL (método GET) debe ser valida antes de proceder a la ejecución de la consulta. El LIMIT en esta consulta es imprescindible, ya que solo vamos a mostrar los datos de un usuario (un registro), y dado que el campo usuario es único, la búsqueda se detiene en el momento que encuentra la primera coincidencia. La estructura de la consulta seria la misma que vimos para el listado, solo tendríamos que adaptar la tabla HTML e imprimir tantas variables como deseemos.

Y con esto damos por finalizado este capitulo dedicado a la lectura de tablas de datos, existen también otro tipo de consultas, pero las veremos en otros capítulos para no extendernos demasiado.
Tags: consulta || lectura || WHERE || LIMIT || ORDER

Comentarios.

Sin comentarios, publica el tuyo.