Autor Tema: PHP consulta MySql SELECT extraer datos bucle while mysqli_num_rows CU00842B#  (Leído 4295 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Hago entrega de los ejercicios de la entrega CU00842B del curso básico de programador web: PHP desde cero.

Citar
EJERCICIO 1

Utilizando la tabla agenda que hemos empleado en los ejemplos y funciones para manejo de cadenas PHP, realiza una consulta a la base de datos para extraer todos los nombres y determina cuántos nombres en la base de datos empiezan por M.

Ejemplo de resultados a obtener: En la base de datos los nombres que empiezan por M son: 2

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>

<?php 

function buscarLetraIniciaNombre($fila){

$cadena "M";
$contador 0;

if(strncasecmp($fila['nombre'], $cadena1) == 0){
$contador 1;
}

return $contador;

}

$link mysqli_connect("localhost""root");
mysqli_select_db($link"mibasededatos");
$tildes $link -> query("SET NAMES 'utf8'");
$result mysqli_query($link"SELECT * FROM agenda");
$coincidencia 0;
while($fila mysqli_fetch_array($result)){
buscarLetraIniciaNombre($fila);
$coincidencia $coincidencia buscarLetraIniciaNombre($fila);
}


echo "En la base de datos los nombre que empiezan por M son: ".$coincidencia;
mysqli_free_result($result);
mysqli_close($link);

?>


</body>
</html>

Citar
EJERCICIO 2

Utilizando la tabla <<ciudades>> que hemos utilizado para ejercicios de entregas anteriores del curso,

 Crea un archivo php donde se realice una consulta a la base de datos para extraer todos los datos de la tabla y a continuación calcula la suma de habitantes de todos los países y cuántas de estas ciudades tienen metro. Muestra el resultado por pantalla.

Ejemplo de resultados a obtener:

La suma de habitantes de México D.F., Barcelona, Buenos Aires, Medellín, Lima, Caracas, Santiago, Antigua, Quito y La Habana es: 5663886 habitantes

De estas ciudades tienen metro: 5 ciudades.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>

<?php 

$link mysqli_connect("localhost""root");
mysqli_select_db($link"prueba");
$tildes $link -> query("SET NAMES 'utf8'");
$result mysqli_query($link"SELECT * FROM ciudades");
$habitantes 0;
$metro 0;
$msg "La suma de habitanes de: ";
$pasadasDeWhile 1;
while($fila mysqli_fetch_array($result)){

disponibilidadMetro($fila);

if($pasadasDeWhile == 10){
$msg $msg.$fila['ciudad'];
}else{
$msg $msg.$fila['ciudad'].", ";
}

$habitantes $habitantes $fila['habitantes'];
$metro $metro disponibilidadMetro($fila);
$pasadasDeWhile++;

}

function disponibilidadMetro($fila){

$contador 0;

if($fila['tieneMetro'] == 1){
$contador 1;
}

return $contador;

}

echo $msg." es: ".$habitantes;
echo "<br><br>De estas ciudades tienen metro: ".$metro." ciudades.";
mysqli_free_result($result);
mysqli_close($link);

?>


</body>
</html>

Mi pregunta es: en la parte del código:

Código: [Seleccionar]
while($fila = mysqli_fetch_array($result)){

disponibilidadMetro($fila);

if($pasadasDeWhile == 10){
$msg = $msg.$fila['ciudad'];
}else{
$msg = $msg.$fila['ciudad'].", ";
}

$habitantes = $habitantes + $fila['habitantes'];
$metro = $metro + disponibilidadMetro($fila);
$pasadasDeWhile++;

}

Puede especificar el último registro de la tabla, porque sé que hay 10 registros. Pero como puede hacer esta condicional:

Código: [Seleccionar]
if($pasadasDeWhile == 10)
sin haber mirado la table en phpMyAdmin? No puedo hacer algo como:

Código: [Seleccionar]
if($pasadasDeWhile == count($result))
Evidentemente no me funciona, porque lo probé y el método "count($result)" me devuelve un valor de "12". Que por cierto, no sé de donde sale, porque los registros en la tabla "ciudades" son 10.

Me tiene intrigado. He mirado por internet y veo que hay unas instrucciones como:

Citar
Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la cantidad sin necesidad de contarlos manualmente usamos la función "count()":

 select count(*) from libros;

pero no consigo aplicarlo.

Gracias.
« Última modificación: 01 de Agosto 2016, 21:58 por Alex Rodríguez »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU00842B consulta MySql, SELECT, bucle while, en PHP
« Respuesta #1 en: 16 de Mayo 2016, 17:59 »
Misterio resuelto. Contestando a mi propia duda, se podrá conseguir con la instrucción "mysqli_num_rows($result);"

Es decir, el código quedará así:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>

<?php 

$link mysqli_connect("localhost""root");
mysqli_select_db($link"prueba");
$tildes $link -> query("SET NAMES 'utf8'");
$result mysqli_query($link"SELECT * FROM ciudades");
$numero mysqli_num_rows($result);
$habitantes 0;
$metro 0;
$msg "La suma de habitanes de: ";
$pasadasDeWhile 1;
while($fila mysqli_fetch_array($result)){

disponibilidadMetro($fila);

if($pasadasDeWhile == $numero){
$msg $msg.$fila['ciudad'];
}else{
$msg $msg.$fila['ciudad'].", ";
}

$habitantes $habitantes $fila['habitantes'];
$metro $metro disponibilidadMetro($fila);
$pasadasDeWhile++;

}

function disponibilidadMetro($fila){

$contador 0;

if($fila['tieneMetro'] == 1){
$contador 1;
}

return $contador;

}

echo $msg." es: ".$habitantes;
echo "<br><br>De estas ciudades tienen metro: ".$metro." ciudades.";
mysqli_free_result($result);
mysqli_close($link);

?>


</body>
</html>

Quizás me podriáis proponer otras maneras.

Gracias.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Supongo que hay múltiples maneras. Otra manera que se me ocurre es primero hacer la extracción de la información y contar el número de datos que extraes (por ejemplo usando un contador). Luego con ese contador ya conoces el número de datos. Sin embargo veo preferible algo como lo qué tú mismo has indicado.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".