Trabajo con sesiones en PHP,Limit de MySQL en SQL, solución

Anuncio
Trabajo con sesiones en PHP
En nuestro artículo de hoy nos vamos a centrar en como trabajar con las
sesiones en PHP, este artículo es parte de nuestro curso profesional de PHP6
y MYSQL
Cuando queremos utilizar variables de sesión en una página tenemos que
iniciar la sesión con la siguiente función:
session_start ()
Inicia una sesión para el usuario o continúa la sesión que pudiera tener
abierta en otras páginas. Al hacer session_start() PHP internamente recibe el
identificador de sesión almacenado en la cookie o el que se envíe a través de
la URL. Si no existe tal identificador se sesión, simplemente lo crea.
Nota: Si en el php.ini se ha definido la variable session.auto_start = 1 se
inicializa automáticamente la sesión en cada página que visita un usuario,
sin que se tenga que hacer el session_start()
La sesión se tiene que inicializar antes de escribir cualquier texto en la
página. Esto es importante y de no hacerlo así corremos el riesgo de recibir
un error.
Una vez iniciada la sesión podemos utilizar variables de sesión a través de
$_SESSION, que es un array asociativo, donde se accede a cada variable a
partir de su nombre, de este modo:
$_SESSION[“nombre_de_variable”]
Ejemplo de código para definir una variable de sesión:
<?
session_start();
?>
<html>
<head>
<title>Generar variable de sesión</title>
</head>
<body>
<?
$_SESSION[“mivariabledesesion”] = “Hola este es el valor de la variable de
sesión”;
?>
</body>
</html>
Con lo visto, vamos a proponer el ejemplo clásico de utilización de una
sesión: un contador. Este contador deberá aumentar de una unidad cada vez que
recargamos la página o apretamos al enlace:
<?
session_register(‘contador’);
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($contador)==0)
{$contador=0;}
++$contador;
echo “<a href=”contador.php”>Has recargado esta página $contador veces</a>”;
?>
</BODY>
</HTML>
La condición if tiene en cuenta la posibilidad de que la
variable $contador no haya sido todavía inicializada. La función isset se
encarga de dar un valor cero cuando una variable no ha sido inicializada.
Otras funciones útiles para la gestión de sesiones son:
Función
Descripción
Session_id()
Nos devuelve el identificador de
la sesión
Session_destroy()
Da por abandonada la sesión
eliminando
variables e identificador.
Session_unregister(‘variable’)
Abandona una variable sesión
Limit de MySQL en SQL, solución.
En MySQL, cuando queremos limitar el rango de registros devueltos por una sentencia SELECT
tenemos la opción de utilizar LIMIT:
Select * FROM tabla LIMIT 10,5
Esta sentencia nos permite devolver 5 registros a partir del décimo. El ejemplo sería
aplicable por ejemplo a un listado paginado con 5 registros por página y estuviésemos
mostrando la tercera de ellas.
El problema es que SQL no tiene la opción de usar LIMIT. En ocasiones podemos
solventarlo rápidamente utilizando TOP, con el que podemos devolver un cierto
número de registros, pero solo desde el primero de la sentencia. La solución
para esto se puede ver en el siguiente código:
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER()
OVER
(ORDER
BY
id)
AS
row
FROM
tabla
) ASalias WHERE row > 10 AND row <= 14
ROW_NUMBER() nos devuelve el número de línea de la consulta empezando por 1. Con este número
de secuencia renombrado como row, ya podemos decirle con un simple where que nos lo limite en
un cierto intervalo. Ciertamente es una solución en SQL un tanto enrevesada frente a la
sencillez del LIMIT ofrecido por MySQL.
GROUP BY, ¿para qué sirve Agrupar
Datos en una Tabla Mysql?
La sentencia group by sirve para agrupar datos, según un determinado criterio, y
aplicar operaciones sobre los elementos del conjunto conformado.
La definición resulta un poco confusa, por lo tanto veamos la utilidad que tiene
la consulta group by a través de un ejemplo práctico.
Supongamos que ahora nos interesa saber la cantidad de servicios que brinda una
determinada empresa. Retomando la definición teórica que vimos al inicio, la
solución a esta consigna podríamos pensarla de la siguiente manera:
Conformaremos un grupo (agrupar datos) por cada empresa (criterio) y dentro de
cada grupo contabilizaremos (operación) la cantidad de servicios que ofrece.
Nuestra consulta mysql quedaría así:
select Empresas.Nombre,Servicios.Servicio,count(*) as CantidadServicios
from Empresas
inner join Servicios on Empresas.Id=Servicios.IdEmpresa
group by IdEmpresa
Observemos que en la línea número 4 especificamos la consulta group by. Es muy
importante respetar el orden de las sentencias mysql (select, from, inner join,
group by, etc). Por ejemplo, si haríamos el group by antes del inner join no
funcionaria como deseamos.
En el group by especificamos “IdEmpresa”. Este vendría a ser el criterio por el
cual deseamos agrupar las filas; en nuestro caso deseamos agrupar todas las
filas que correspondan a la misma empresa.
Una vez que tenemos armados los grupos, contabilizamos las filas que contiene
cada uno. Esto lo hacemos en la línea 1 de nuestra consulta mysql
mediante count(*) y volcamos el resultado del conteo dentro del campo
“CantidadServicios”.
Cada grupo representará una fila en el resultado final de nuestra consulta mysql
group by. Y como hemos aprendido previamente podemos utilizar la
sentencia mysql_fetch_array para imprimir en pantalla los resultados de una
consulta msyql.
Finalmente el código fuente php completo quedaría de la siguiente manera:
// Conexión a base de datos Mysql
$conexion=mysql_connect('localhost','Tu-Usuario-Mysql','Contraseña-de-tuUsuario-Mysql');
mysql_select_db('Nombre-de-tu-Base-de-datos-Mysql',$conexion);
// Consulta Mysql donde aplicamos GROUP BY
$consulta_mysql="select Empresas.Nombre,Servicios.Servicio,count(*) as
CantidadServicios
from Empresas
inner join Servicios on Empresas.Id=Servicios.IdEmpresa
group by IdEmpresa";
$resultado_consulta_mysql=mysql_query($consulta_mysql,$conexion);
// Imprimimos en pantalla los resultados de nuestra consulta mysql
while($fila=mysql_fetch_array($resultado_consulta_mysql)){
echo "La empresa ".$fila['Nombre']." ofrece ".$fila['CantidadServicios']." a
sus clientes.
";
}
En este caso nos interesaba “contar” la cantidad de filas que conformaban cada
grupo. Pero también se pueden efectuar otras operaciones.
Una operación muy utilizada es sum y sirve para efectuar sumatorias de valores
contenidos en un grupo, la operación sum del group by nos servirá para calcular
el importe total por ejemplo de la compra en el carrito del cliente (estaríamos
haciendo una sumatoria de los importes de cada ítem).
www.asociacionaepi.es
Descargar