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'], $cadena, 1) == 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!