Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 16 de Mayo 2016, 17:39

Título: PHP consulta MySql SELECT extraer datos bucle while mysqli_num_rows CU00842B#
Publicado por: Dimitar Stefanov en 16 de Mayo 2016, 17:39
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.
Título: Re:CU00842B consulta MySql, SELECT, bucle while, en PHP
Publicado por: Dimitar Stefanov 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.
Título: Re:PHP consulta MySql SELECT extraer datos con bucle while mysqli_num_rows CU00842B
Publicado por: César Krall en 18 de Mayo 2016, 11:49
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!