Inicio

viernes, 16 de septiembre de 2011

Consulta con WHERE y LIKE

Siguiendo con los tipos de consulta que podemos realizar a nuestra BD , puede surgir la necesidad de filtrar la misma bajo ciertos criterios. Supongamos que deseamos recuperar aquellas entradas de nuestro ejemplo que cuyos nombre comiencen por la letra J. Necesitamos echar mano de la sintáxis SQL y emplear los operadores WHERE (donde) y LIKE(como). Veamos el ejemplo:
<html>
<head>
       <title>Petición a BD con WHERE</title>
</head>

<body>
Solicitud de nombre de personas que empiecen por la letra "J".<br>
<?php
//realizando la conexión
mysql_connect("localhost","root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

//obteniendo un resultado específico de la tabla example
$resultado=mysql_query("SELECT * FROM example WHERE nombre Like 'J%'" ) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";
while($row = mysql_fetch_array($resultado)){
// Presentando los resultados

echo $row['nombre']." -> ".$row['edad']."<br>";
}

?>
</body>
</html>

He resaltado la sentencia en negrita para explicarla. Con la misma solicitamos todos aquellos datos de la tabla "donde" nombre sea "como" J más los datos que sigan.
Un resumen de estos comodines:
EjemploDescripción
LIKE 'A%'Todo lo que comience por A
LIKE '_NG'Todo lo que comience por cualquier carácter y luego siga NG
LIKE '[AF]%'Todo lo que comience por A ó F
LIKE '[A-F]%'Todo lo que comience por cualquier letra comprendida entre la A y la F
LIKE '[A^B]%'Todo lo que comience por A y la segunda letra no sea una B
Por último con la sentencia que reescribo más abajo contamos el número de filas que devuelve  la consulta:
$num_rows = mysql_num_rows($resultado);

Recuperando listado de datos

Supongamos ahora que deseamos realizar un listado por pantalla de todos los datos que tengamos en una tabla. Para ello y, utilizando los datos de nuestro ejemplo, vamos a presentar un ejemplo de como podemos hacerlo:
</head>
<body>
<?php
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";
echo"<br>";
echo"<hr>";
echo"Datos de la petición a las ".date("H:i:s")."<br>";
// realizando la conexión
$query = "SELECT * FROM example";

$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

?>
</body>
</html>

He incluido algunos complementos para hacer la tabla más presentable.Por ejemplo la fecha actual en la cabecera:
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
Después los códigos para la conexión a la base de datos y tabla del ejemplo:

mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";

Conformamos la tabla de presentación, realizamos la petición con while... y presentamos los resultados:
$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

El resultado sería este: